티스토리 뷰

Event 2019, 2020 Nonpaged pool이나 Paged pool이 부족 할 경우 발생한다고 여러차례 설명을 하였습니다. Nonpaged pool pagde pool를 합쳐서 pool memory(풀 메모리)라고 합니다.

http://ryuchan.kr/entry/Nonpaged-pool비페이징--Paged-pool페이징-
이 풀 메모리에는 시스템 관련 드라이버나 커널 객체들이 로드 되는데 풀 메모리 부족 현상이 발생하는 주요 이유는 풀 메모리에 로드 되는 드라이버들의 메모리 누수(Leak) 때문입니다.
풀 메모리의 부족으로 Event 2019혹은 2020이 발생 한다면 아래와 같은 4가지 방법으로 시스템의 풀 메모리를 가장 많이 사용하는 Pool tag를 확인 할 수 있습니다. 문제의 pool tag가 확인이 되면 맨 아래 설명 된 findstr 명령어로 해당 Pool tag를 사용하는 시스템 드라이브를 찾을 수 있습니다
.
풀 태그가 무엇인지에 대해서는 이전에 포스팅한 아래 블로그를 참고 하시기 바랍니다
.
http://ryuchan.kr/entry/Pool-Tag-태그란-무엇인가

[커널 리소스 사용량 확인 방법]
1. Poolmon.exe
메모리 풀 모니터(Poolmon.exe)를 사용하여 커널 모드 메모리 누수 문제를 해결하는 방법
http://support.microsoft.com/kb/177415

2. Windbg or Livekd.exe

명령프롬프트 실행 후 debugging tool이 설치 된 directory로 이동 후 아래 명령어 실행
Nonpaged Pool
Kd.exe -kl -y "srv*c:\symbols*http://msdl.microsoft.com/download/symbols" -c "!poolused /t5 2";;q

Paged Pool
Kd.exe -kl -y "srv*c:\symbols*http://msdl.microsoft.com/download/symbols" -c "!poolused /t5 4";;q

3. Pooltag.exe
PoolTag.exe 이용하여 Nonpaged pool Paged Pool 많이 사용하는 Tag 알아보기

4. Poolsnap
   A. Poolsnap 이용한 Event id 2019, 2020 발생 원인 분석 #1
   B. Pool Log Analyzer Tool

위의 방법들을 이용해서 어떤 Pool tag가 많은 커널 메모리를 사용하는지 확인이 되었다면 이제는 해당 Pool tag는 어떤 드라이브들이 사용을 하는지에 대한 확인이 필요 합니다.
문제가 발생 했던 서버로 로그온 후 명령 프롬프트 실행 후 C:\windows\system32\drivers 폴더로 이동합니다.

findstr /M /L 풀태그 * .sys (풀 태그의 문자는 반드시 대소문자를 구분 하셔야 합니다.)

만약 위와 같은 툴 들이 준비 되어 있지 않다면 bange.exe나 키보드 덤프 혹은 NMI를 통해서 메모리 덤프를 수집 후에도 확인이 가능 합니다.

감사합니다.

 

댓글
댓글쓰기 폼