2005/11/07

IIS튜닝 - 응용프로그램 풀 대기열 조정

"HTTP 500 웹 서버 사용량이 너무 많습니다."

AspRequestQueueMax 속성은 큐에 허용되는 최대 동시 ASP 요청 수를 지정한다.

큐가 꽉 차 있을 때 클라이언트 브라우저에서 ASP 파일을 요청하면 "HTTP 500 웹 서버 사용량이 너무 많습니다." 오류가 나타난다.

물론 IIS에서 동시접속수를 제한해 놓았거나, AspSessionMax 값이 제한되어 있을경우에도 나타난다. 그러나 제한되어 있지 않은 서버에서는 IIS의 로드가 상당히 높거나 블로킹 쓰레드에서 기다릴 때 상당한 대기열이 발생하여 나타난다.

위와 같은 오류페이지가 출력될 경우 다음 성능카운터를 통해서 Asp Quque 상태를 모니터해야 한다.

AspRequestQueueMax 의 기본값은 3000 이다 그러나 블로킹등의 문제로 인해서 큐에 계속해서 쌓일경우 오류페이지를 출력하며 그 직전 상태에서는 웹페이지 로딩이 상당히 느려진다.

일반적으로 잘 작성된 스크립트의 경우 쓰레드의 개수가 낮으며, 전체 Queue 길이가 올라가거나 내려가고 프로세서가 50% 이하로 실행되는 경우 일부 요청이 차단되고 있으며 스레드 수를 늘리는 것이 좋다는 표시이다.

스레드를 늘린 후에 대기열에 있는 요청 수가 전보다 악화되고 프로세서 사용율이 점점 낮아지는 것이 관찰되면 블록킹 문제가 심각해진 것입니다. 일반적인 블록킹 문제는 데이터베이스에 대한 SQL 쿼리가 매우 오래 실행되기 때문에 발생할 수 있습니다.


<화면> HTTP 압축 설정

5초 간격으로 Requests Queud , Requests Executing, Requests/Sec 와 Processor Time을 체크한 값이다. 평균 큐갯수는 3.17개 정도로 스크립트 실행시간이 길어질 때 큐 개수도 높아지는 것을 알 수 있다.

위 서버의 경우는 Http 동시연결 600개 정도로 큐 및 실행시간이 길어지는 이유는 DB서버의 로드(CPU로드 80~90%) 때문에 웹페이지 로딩도 함께 느려진 상태이다.

쓰레드수와 큐최대 값은 Adsutil 이나 메타베이스익스플로러를 통해서 변경할 수 있다. 변경에 대한 적정값은 서버마다 다르므로 꼭 성능모니터와 함께 변화에 따른 영향을 모니터해야 한다.

adsutil.vbs set w3svc/AspProcessorThreadMax 40

adsutil.vbs set w3svc/AspRequestQueueMax 3500



06-AspRequestQueue2.gif

댓글 없음:

댓글 쓰기

가장 많이 본 글