IIS로 서비스를 하거나 준비하다보면...
특정 사이트에서 메모리 누수가 생겨서 계속 메모리가 증가한다던가, CPU 를 100% 먹는다든가 하는것 말이다.
이럴경우 해당 사이트를 중지/재실행하던가 IIS서버 자체를 ReStart하는 형태로 해결을 한다.
문제는 한서버에 여러사이트가 운영되고 있는 상황이다.
대체 [작업관리자]에 저 메모리를 집어먹고 있는놈은 지금 돌아가고 있는 사이트중에 어떤놈이란 말인가? ㅡ ㅡ
그렇다고 멀쩡히 돌아가는 다른 사이트까지 다 죽이기도 그렇고...
이 포스트는 그놈(?)을 색출하는 방법이다.
IIS 6.0의 경우 5.0과는 달리 [작업관리자]에서 IIS실행 프로세스로 확인할 수 있는것이 Dllhost.exe가 아니라 w3wp.exe 이다.
이는 IIS메뉴에 있는 [응용프로그램 풀]에 해당한다. (정확하게 같은것은 아니지만..그냥 같다고 생각하자.)
그러므로 사실상 w3wp.exe하나가 한 사이트. 혹은 한 웹서비스로 보아도 무방하다. (이도 사실아니지만 이글에선 그냥 같다고 하자.)
그럼 [작업관리자]에서 w3wp.exe 가 떠있는것 만큼 웹사이트가 돌고 있는것인데,
각각의 w3wp.exe를 구분할 수 있는 유일한 구분자는 PID. 즉 ProcessID뿐이다. [작업관리자] PID만으로 어느사이트인지 알 수는 없을까?
이 PID를 가지고 해당 서비스 사이트를 찾아보자.
아. 먼저 이 방법은 당연히 IIS가 설치되어있는 서버에서만 가능하다.

그림처럼 [작업관리자]에서 w3wp.exe의 PID들을 확인한다.
컴맨드 창을 띄워서 iisapp라고 입력하자.
그러면. wscript 로 실행할 수 없는 스크립트라는 경고가 뜨고, cscript 로 실행하겠냐고 묻는다.
그러고 나서 다시 iisapp를 하면 다음과 같은 결과를 볼수 있다.

실서비스서버라 모자익 처리했습니다. (^^
현재 메모리에 떠있는 w3wp.exe의 PID별로 IIS의 Application Pool 의 이름을 보여주고 있다.
IIS를 띄워보자.

[응용프로그램 풀]을 들어가면 같은 이름의 Application Pool 들이 있는것을 확인할 수 있다.
서두에 잠시 언급했듯이 w3wp.exe가 Application Pool 를 그대로 의미하는 것은 아니다.
그러므로 각각의 다른 PID가 같은 Application Pool 를 가리킬 수도 있다. (이건 다음기회에...)
어쨌든 이렇게 확인을 하면 문제를 일으킨 놈(?)을 확인하여 그놈만 확인사살을 하거나 디버깅을 할 수 있다.
참고로 혹시 컴맨트 창에서 iisapp가 경로를 찾지 못하면 다음과 같이 하면 된다.
이파일의 실경로는 c:\windows\system32\iisapp.vbs 이며 cscript로 실행한다.

주의할점은 PID는 현재 기동되어있는 프로세스를 구별하기 위해, 윈도우에 프로세스가 기동될때마자 임의로 주어진다 메모리에서 내려갔다 올라오면 숫자가 변한다는 의미다. 그러므로 '우리 관리단 PID는 3456 야 ' 따위는 아무 의미없다.
더 자세한건 다음 링크를 참고.
http://www.microsoft.com/technet/prodte ··· r%3Dtrue




Comments List