류짱:Beyond MySelf

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를 통해서 메모리 덤프를 수집 후에도 확인이 가능 합니다.

감사합니다.

 

Comment 0

MmSt pool tag가 어디에 무엇에 사용되는지 왜 많은 paged pool 메모리를 사용하는 지 이해가 되지 않았었는데 아래 블로그를 보니 완전 입감되네요..

Getting to Know the MmSt Pool Tag
http://blogs.technet.com/b/askperf/archive/2011/09/23/getting-to-know-the-mmst-pool-tag.aspx

What is the MmSt pool tag?
The MmSt pool tag is used by the Memory Manager when reserving memory for section prototype PTEs. A prototype PTE is a structure that maps the physical location of a page or set of pages to a memory mapped file. The MmSt allocations reside in Paged Pool memory. MmSt allocations are most commonly seen when the system is under heavy file I/O and has many open files mapped into the memory cache. The Cache Manager should reduce its MmSt allocations when paged pool memory pressure occurs, but this may not always happen quickly enough to prevent some issues.
 
Common Symptoms
The symptoms for issues dealing with high MmSt paged pool usage are common to most other paged pool depletion issues including:
•Server hangs
•Event ID 2020 – Paged Pool depletion
•Event ID 333 - An I/O operation initiated by the Registry failed
•Users are unable to RDP or access file shares on the server
•Backups or large file copies fail with insufficient resources
oError 1450: Insufficient resources exist to complete the requested server
oError 1130: Not enough server storage is available to process this command
•SQL backups or consistency checks performing heavy file I/O will fail to complete
 
Most Common Root Causes for high MmSt pool usage
•The Memory Manager cannot trim paged pool memory quickly enough before allocations start failing
•Heavy file I/O because too many files or large files are opened simultaneously
•Outlook .PST/Lotus Notes .NSF files being stored on the server and opened over the network
•VSS (Volume Shadow Copy) snapshots aren’t dismounting
•Large $MFT due to fragmentation or many files on the volume



실제로 아래 로그는 Windows Server 2008 x86 머신에서 메모리 덤프(64G)를 외장하드로 Copy하는 중에 Paged Pool의 사용량이 계속 증가하여 Poolmon을 이용해서 어떤 녀석이 많은 메모리를 사용하는지 확인 해보니 역시나~ MmSt가 많은 메모리를 사용하였습니다. ^^

덤프 파일 copy 완료 후 USB를 제거하는 순간 MmSt의 Paged pool 사용량은 현저히 줄어 들었습니다.

[Poolmon을 이용한 paged pool 사용량]

Windows Server 2008 EE x86 + SP2
Physical memory: 64G 

더보기


[참고 자료]
Backup program is unsuccessful when you back up a large system volume
http://support.microsoft.com/kb/304101/en-us

서버가 시스템의 페이지된 풀에서 메모리를 할당할 수 없다
http://support.microsoft.com/kb/312362/ko

Tracking down MmSt paged pool usage
http://blogs.msdn.com/b/ntdebugging/archive/2008/05/08/tracking-down-mmst-paged-pool-usage.aspx

감사합니다.^^

Comment 0