류짱:Beyond MySelf

Poolsnap을 이용한 Event id 2019, 2020 발생 원인 분석 #1 본문

Microsoft/Windows Platform

Poolsnap을 이용한 Event id 2019, 2020 발생 원인 분석 #1

リュちゃん 2009. 10. 15. 17:17

운영 중인 시스템에서 event 2019나 2020 이 발생하면 NonPaged pool과 Page pool 등의 커널 리소스의 사용량 확인이 반드시 필요합니다.
Nonpaged pool과 Paged pool이 무엇인지는 아래 포스팅 내용을 참고 하시기 바랍니다.
Nonpaged pool(비페이징 풀) & Paged pool(페이징 풀)

아래 사례는 실제 운영 시스템에서 Nonpaged pool이 거의 소진 되어 Event 2019 메세지가 지속적으로 발생하여 어떤 시스템 드라이버가 많은 메모리를 사용하는지 확인 하기 pool tag의 메모리 사용량을 모니터링 하는 방법을 설명 한 것입니다.

아래와 같은 상황에서 Poolmon을 이용하여 Tag를 확인 할 수도 있지만 poolsnap을 이용해서도 가능 합니다. Poolmon 사용 법에 대한 자세한 내용은 다음에…… 그리고 Pooltag.exe 라는 프로그램도 있습니다만 오늘은 PoolSnap 을 이용해서 한번 확인 해 보도록 하겠습니다.

[환 경]
Windows server 2003 Ent + SP2

[증 상]
Event ID 2019 발생과 함께 시스템 반응이 느려짐

Event ID 2019
Description:
The server was unable to allocate from the system nonpaged pool because the pool was empty.


[분석 결과]
페이지 안됨(Non paged pool의 메모리가 거의 다 소진 되었음
현재 시스템의 boot.ini 확인 결과 3GB 옵션이 없기 때문에 해당 시스템이 사용 할 수 있는 최대 NP 메모리는 약 260M 이므로 거의 다 소진 된 상태임.
서버 별 사용 가능한 커널 메모리 Table은 아래의 주소를 참조^^
http://ryuchan.kr/16

 

[Action Plan]
현재 어떤 드라이브가 Kernel 메모리를 많이 사용하고 있는지 확인 하기 위해서는 아래와 같이 Poolsnap을 이용하여 로그를 수집 한 후 분석을 합니다.

1. Poolsnap Log 수집 방법

 1. 아래의 파일을 다운 받아 압축을 해제합니다. 
   


2. 압축 해제된 파일 중 gflags.exe를 실행하신 후 "Enable Pool Tagging" 옵션을 체크하고, [Apply]를 누르고 [OK]를 누릅니다.

3. 도스 창을 실행하신 후 압축 해제된 디렉토리로 이동하신 후 아래 명령을 실행합니다.
poolsnapsvc -install
아래 명령은 PoolSnapSvc 서비스를 설치 후 poolsnap 로그를 C:\ 에 생성합니다.
위 명령을 수행하면 아래와 같은 메시지가 나타납니다.
Pool Snap Service installed.
Pool Tagging not enabled, Reset GlobalFlag to 0x400 and please reboot your machne to take effect now

4. 서비스에서 "Pool Snap Service" 서비스를 시작합니다.

5. 문제 재현 후, 생성된 c:\poolsnap.log 파일을 확인합니다..
(해당 서비스 시작 후에 재 부팅 없이도 해당 경로에 파일이 정상적으로 수집되는지 확인 후 로그가 제대로 생성 되지 않을 경우에는 시스템의 재 부팅이 필요합니다.)

6. PoolSnap Log가 기록 되는 시간은 아래 레지스트리 키를 이용해서 변경이 가능 합니다.
   기본 값은 5분 입니다. Log가 생성 되는 위치도 변경이 가능 하겠네요^^

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PoolSnap\Parameters\Sample Interval




2. 성능 모니터 설정]

   추가 적으로 서버의 상태 체크를 위해서는 성능 로그를 수집 하는 것이 좋습니다.

[Performance Log]
        다음의 objects에 대해서 모든 counters, instances를 수집합니다.

        Process
        Processor
        Memory
        Server Work Queues
        Thread
        System 
        Network Interface

수집 간격은 10분 정도로 하시고 수집해 주십시오.데이터 샘플 간격은 4시간 이상 모니터링 하는 경우 15초마다 업데이트하는 것이 적당합니다.
8시간이상 수집하는 경우 300초(5분)보다 짧게 설정하지 마십시오

다음에는 수집 된 위 로그를 분석하는 방법을 설명 하도록 하겠습니다.

감사합니다^^