본문 바로가기
프로그래머/프로그래밍

ASP IIS단에서의 튜닝...

by plog 2008. 11. 12.

IIS와 관련된 문제 중 성능이 떨어 진다거나 마치 서버가 죽은 것처럼 되는 경우, 대부분 특별한 오류 이벤트나 오류 메시지가 발생하지 않으므로 원인을 추정하기가 어려운 경우가 대부분입니다. 하지만, 대부분의 그런 경우는 ASP 프로그램상에 문제가 있는 경우가 많다는 사실이 지금까지의 기술지원 경험을 통해서 밝혀졌습니다

1. Object 변수는 반드시 Nothing 시켜 주어야 합니다
Object 변수는 생성을 한 뒤 사용을 한 후 동일 ASP 페이지에서 즉시 Nothing으로 사용된 메모리를 Free 시켜주어야 합니다.

통상적으로 변수를 Nothing 처리 시켜주지 않아도 IIS 가 자체적으로 ASP 페이지 프로그램 종료 때 자동으로 반환하므로 이 작업을 하지 않는데 동시 사용자 수가 많은 경우는 이것을 하지 않게 되면 서버가 메모리를 적시에 반환을 못하게 되어 결국 메모리 부족현상이 일어나는 경우가 있습니다. 그리고 오류 처리를 하는 경우 오류가 난 시점에서 그때까지 만들어진 모든 Object 변수를 Nothing 처리하여 주어야 하는 것을 잊어서는 안됩니다. 오브젝트 변수를 Nothing 시키는 방법은 ‘Set 변수명 = nothing’ 입니다. 

2. 변수 Nothing 처리는 페이지 레벨로 이루어져야 합니다.
ASP 프로그램에 세션 변수라는 것이 있어 세션이 활성화 되어 있는 동안 계속 재사용할 수 있습니다. 흔히들 하는 “DB Connection Object 변수를 세션 변수로 만들어 세션 종료시점에 Nothing하면 된다” 라는 우를 범하게 됩니다. 이것은 사실이 아닙니다. DB Access를 하는 ASP 프로그램에서 가장 속도가 많이 걸리는 부분은 SQL 서버의 응답시간이 늦어져서 발생하는 속도 저하 현상입니다. 따라서 가능한 SQL서버의 부하를 덜어야만 응답속도를 최소화 할 수 있는데 위에서 말한 Connection 변수를 세션변수로 사용하게 되면, SQL 서버가 처리하는 동시 접속자수가 계속해서 증가하므로 SQL 서버가 현저히 늦어지는 문제가 발생하며, 실제로 SQL 서버가 답을 느리게 주므로 IIS 서버가 마치 죽은 것처럼 속도가 매우 떨어지는 현상이 발생합니다. 즉, 세션/응용프로그램 수준의 Object 변수는 가능한 사용하지 말아야 합니다. 따라서 DB Connection 변수는 Page 레벨에서 만들어서 바로 그 Page에서 Nothing 시켜주어야 합니다

3. 변수 Nothing 처리는 가능한 빨리 이루어져야 합니다
흔히 ASP 프로그램을 짜는 경우 Object 변수를 ASP 맨 처음에 생성하여 맨 뒤에서 Nothing을 하는 습관을 가진 분들이 있는데 이것 또한 IIS에 동시 접속사용자 수가 많아지면 문제가 될 수 있습니다.
Object 변수를 만드는 시점은 그 변수를 사용하는 시점에서 생성을 해야 하고 사용이 끝난 시점에서 바로 Nothing을 시켜야 합니다. 예를 들면, DB Connection 변수의 사용도 한번 Connection을 맺고 페이지 맨 끝에서 Nothing 시켜 주는 것보다 ASP가 다소 길어지지만 여러 번에 걸쳐 필요한 그 시점마다 Connection을 맺게 하는 것이 더 효율적일 수가 있습니다

참고: MS 기술 문서

댓글