IIS 웹 사이트 오류 - HTTP 503: Service Unavailable
다수의 웹 사이트를 운영 중인 서버에서 특정 웹 사이트 접속 시 service unavailable 메시지와 함께 웹 사이트 접속이 불 가능한 현상이 발생 하였습니다.
[환 경]
Windows Server 2003 EE x86 / IIS 6.0
[문의 사항]
특정 웹 사이트 오류 발생 원인 분석
[증 상]
특정 시간 대에 xxxx 웹 사이트 접속 시 service unavailable 메시지 발생
Httperror에 아래와 같은 오류 메시지 생성
2011-03-22 07:21:20 xxx.xxx.xxx.xx 4938 xxx.xxx.xxx.xxx 80 HTTP/1.1 GET /xxxx.jsp 503 1214720207 QueueFull xxxx 2011-03-22 07:21:20 xxx.xxx.xxx.xx 8591 xxx.xxx.xxx.xx 80 HTTP/1.1 GET /edp/xxxxxxxxxxdo?method=listUserSearch 503 1214720207 QueueFull xxxx |
[원 인]
IIS 에서는 웹 사이트의 너무 많은 요청으로 인해 큐가 꽉 차거나 서버가 오버로드되는 것을 막기 위해 응용 프로그램 풀 큐의 길이를 제한 합니다.
용 프로그램 풀 큐 길이 제한을 설정하면 IIS에서 새 요청을 큐에 넣기 전에 지정된 응용 프로그램 풀 큐의 요청 수를 모니터링 하여 큐에 새 요청을 추가하고 큐 크기가 초과되면 서버에서 요청을 거부하고 사용자 지정할 수 없는 503 오류 응답 메시지를 클라이언트에 보냅니다.
각 응용 프로그램 풀에서 커널 요청 큐는 기본으로 IIS 6.0이 SP1 설치 전에 설치된 경우에는 4000, 이후에 설치된 경우에는 1000으로 제한됩니다.
[조치 방법]
조정이 필요한 경우 이 값을 5000 정도로 늘려 조정하실 것을 권장합니다. 이 값을 제한하지 않거나 너무 크게 늘려 줄 경우 응용 프로그램 풀에서 메모리 부족을 겪을 수도 있습니다.
이 값을 조정하는 방법은 다음 기술문서를 참고하십시오.
error message if the AppPoolQueueLength value is too low: "HTTP 503: Service Unavailable"
http://support.microsoft.com/kb/816995/en-us
커널 큐 모니터링 관련 Current ISAPI Extension Request 값 이벤트 로깅
Windows Server 2008에서는 “HTTP Service Request Queues” 성능 카운터에서 이 값을 모니터링 할 수 있으나
Windows Server 2003 IIS 6.0에서는 Http.sys 커널 디바이스 드라이버의 성능 카운터가 제공되지 않습니다.
따라서, IIS 6.0에서는 (WebLogic과 같이) ISAPI 응용 프로그램으로 인해 응용 프로그램 풀 큐가 꽉 찬 경우, 정확한 값을 알 수는 없으나 Web Service의 Current ISAPI Extension Requests 성능 카운터를 이용하여 특정 사이트를 모니터링할 수 있습니다
[IIS] ISAPI Extension 개요
http://community.365managed.com/?document_srl=1413
아래 방법은 Current ISAPI Extension Request의 값이 특정 수치를 초과 하게 될 경우 Event log에 메시지가 생성 되게 하는 것입니다.
아래 방법은 Current ISAPI Extension Request의 값이 255를 초과 할 경우 응용프로그램 Event에 2031이 생성되게 설정 하는 방법을 정리 한 것입니다.
위 값을 초과 할 경우 아래와 같은 이벤트가 발생
=> 아래 내용은 어제 테스트 했던 샘플 입니다. 참고 하시기 바랍니다
이벤트 형식: 정보
이벤트 원본: SysmonLog
이벤트 범주: 없음
이벤트 ID: 2031
날짜: 2011-03-22
시간: 오후 6:29:32
사용자: N/A
컴퓨터: xxxxxxx
설명:
카운터: xxxxxxxxxx Service(dmcedu)\Current ISAPI Extension Requests이(가) 경고 임계값을 xx로 했습니다. x의 카운터값이 높, x의 제한값입니다.
[참고 사이트]
응용 프로그램 풀 큐 길이 제한 구성
http://technet.microsoft.com/ko-kr/library/cc783466(WS.10).aspx