메모리 누수로 인한 웹 서비스 장애가 발생하였을 때 나타나는 대표적인 증상과 체크사항
메모리 누수란 메모리 사용량이 증가하여 가용 메모리가 부족한 현상을 말합니다.
보통 이 문제가 발생하게 되면 웹 페이지에 “Out of Memory Exception”라는 에러메시지가 나타납니다.
문제 발생 원인을 알기 위해서 특정 프로세스에 대해 Memory Leak Rule을 설정하고 메모리 Dump를 수집하여야 합니다.
IIS Diagnostics Toolkit (x86)
보통 메모리 누수는 어떤 객체가 메모리를 사용을 마친다음 반환를 안할 경우에 발생하게 됩니다. 이를 해결하기 위해서는 적절한 시점에 할당된 메모리를 해제하도록 코드를 수정하여야 합니다.
이 밖에 IIS6에서 요청이 처리되지 않고 서버를 재시작함으로써 문제가 해결되었다면 HTTPERR.LOG 파일에서 Connections_Refused가 기록되어 있는지 확인합니다. 만약 문제 시점에 Connections_Refused가 연속해서 발생하였다면 Non-paged pool memory에서 메모리 누수가 발생하였다는 것을 의미합니다. Non-paged Pool memory란 Paging되지 않는 system memory heap으로 언제나 physical memory에 상주하는 virtual address memory입니다. Non-paged pool memory가 20MB이하인 경우 Http.sys 드라이버는 가용한 운영체제 자원에 영향을 줄이기 위해 새로운 연결을 받는 것을 중지하게 됩니다.
문제를 해결하기 위해서 boot.ini 에 설정된 3GB 옵션이 설정되어 있는지 확인하고 설정되어 있다면 이를 해제합니다. 기본적으로 Kernel Mode memory 와 User Mode memory 에 2GB 씩 할당되었다면, 위 설정은 User Mode memory에 3GB 를 설정함으로써 상대적으로 Kernel Mode memory가 줄어들게 만듭니다. 또한, Workaround로 이 문제를 완화하기 위해 EnableAggressiveMemoryUsage 레지스트리 키를 설정하는 방법도 있습니다. 이 값을 설정하면 Http.sys 드라이버는 가용한 Non-paged pool memory가 8MB 미만인 경우 새로운 연결을 받는 것을 중지합니다.
Comments
- Anonymous
January 11, 2009
The comment has been removed