일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- cluster node as Domain controller
- dsquery
- 인문고전
- failover cluster
- 작업관리자
- Local TempDB
- 안철수
- Xperf
- LiveKD
- ftp7.5 장애조치 클러스터
- Windows Server 2008
- Windows Server 2016
- 터키여행
- windows media service
- MSCS on VMWare
- windbg
- SQL Server 2012R2 FCI
- Windows Server 2016 Hyper-v Cluster
- 프로세스 CPU 사용량
- Nested VM
- Session space
- windows debugging tool
- iSCSI target
- Hyper-V
- paged pool
- SQL Server 2008
- 클러스터
- FTP7.5
- windows update
- nonpaged pool
- Today
- Total
류짱:Beyond MySelf
NotMyFault를 이용한 풀 메모리 Leak 발생 테스트 본문
NotMyFault를 이용한 풀 메모리 Leak 발생 테스트와 windbg를 이용해서 Local kernel debugging 으로 pool memory를 사용하는 tag 들을 확인 해 보도록 하겠습니다.
[준비 사항]
Windows debugging 툴과 Notmyfault를 다운로드 후 설치 합니다.
가. Debugging Tools for Windows
http://msdn.microsoft.com/en-us/windows/hardware/gg463009
Windbg 설치 방법은 생략 합니다. 서버 버전에 맞는 파일을 다운로드 후 설치 하시기 바랍니다.
나. NotMyFault
http://download.sysinternals.com/Files/Notmyfault.zip
저는 편의상 해당 파일 다운 로드 후 바탕 화면에 압축을 풀었습니다.
다. nonpaged pool 메모리 릭 발생 전 작업 관리자에서 확인한 커널 리소스
paged pool: 18M
Nonpaged pool: 12M
[NotMyFault를 이용한 풀 메모리 Leak 발생 테스트 및 Windbg를 통한 확인]
1. 준비 사항 '가'에서 다운 받은 Debugging Tool을 설치 합니다. => 설치 방법은 생략...
2. 바탕 화면\sysinternals\Notmyfault\exe\Release폴더로 이동하여 NotMyfault.exe 실행 합니다.
3. Nonpaged Pool Memory Leak을 발생 시키기 위해 Leak Nonpaged 를 클릭 합니다.
* 1M 단위로 Nonpaged pool의 Leak이 발생합니다. 작업 관리자에서 Nonpaged pool의 사용량이 증가 하는 것을 확인 할 수 있습니다.
Nonpaged pool의 크기가 120M 정도까지 증가 하면 Stop nonpaged 를 클릭하여 Leak 발생을 중지 합니다.
4. 이제 windbg를 이용해서 Local kernel debugging을 시작 합니다. Windbg 실행과 심볼 fix 방법은 아래 포스팅을 참고 하시시기 바랍니다..
Windows server 2003 커널 리소스(Nonpaged pool, Paged pool) 최대 값 확인
http://ryuchan.kr/87
5. Windbg 화면에서 아래의 명령어를 실행 합니다
lkd> .symfix c:\symbols //C:\symbols 폴더로 심볼 경로를 지정합니다.
lkd> .reload // 심볼을 리로드 합니다.
Connected to Windows Server 2003 3790 x86 compatible target at (Fri Feb 17 22:00:28.240 2012 (GMT+9)), ptr64 FALSE
Loading Kernel Symbols
...............................................................
...................................
Loading User Symbols
..........................................................
Loading unloaded module list
lkd> !vm 1 // 시스템의 Virtual Memory 상태를 확인 합니다.
*** Virtual Memory Usage ***
Physical Memory: 262004 ( 1048016 Kb)
Page File: \??\C:\pagefile.sys
Current: 1572864 Kb Free Space: 1557856 Kb
Minimum: 1572864 Kb Maximum: 3145728 Kb
Available Pages: 191765 ( 767060 Kb)
ResAvail Pages: 199425 ( 797700 Kb)
Locked IO Pages: 359 ( 1436 Kb)
Free System PTEs: 76854 ( 307416 Kb)
Free NP PTEs: 20766 ( 83064 Kb)
Free Special NP: 0 ( 0 Kb)
Modified Pages: 152 ( 608 Kb)
Modified PF Pages: 157 ( 628 Kb)
NonPagedPool Usage: 30894 ( 123576 Kb) // Nonpaged pool이 약 123 사용중임을 확인
NonPagedPool Max: 51960 ( 207840 Kb) // Nonpaged pool 최대 값
PagedPool 0 Usage: 2953 ( 11812 Kb)
PagedPool 1 Usage: 770 ( 3080 Kb)
PagedPool 2 Usage: 760 ( 3040 Kb)
PagedPool Usage: 4483 ( 17932 Kb)
PagedPool Maximum: 43008 ( 172032 Kb)
Session Commit: 211 ( 844 Kb)
Shared Commit: 2761 ( 11044 Kb)
Special Pool: 0 ( 0 Kb)
Shared Process: 2690 ( 10760 Kb)
PagedPool Commit: 4491 ( 17964 Kb)
Driver Commit: 1221 ( 4884 Kb)
Committed pages: 52346 ( 209384 Kb)
Commit limit: 632268 ( 2529072 Kb)
lkd> !poolused /t5 2 //nonpaged pool을 가장 많이 사용하는 top5 를 리스트
Sorting by NonPaged Pool Consumed
Pool Used:
NonPaged Paged
Tag Allocs Used Allocs Used
Leak 111 113664000 0 0 UNKNOWN pooltag 'Leak', please update pooltag.txt
LSwi 1 2576384 0 0 initial work context
nVsC 7 1445440 0 0 UNKNOWN pooltag 'nVsC', please update pooltag.txt
TCPt 27 1422016 0 0 TCP/IP network protocol , Binary: TCP
RaRS 1000 720000 0 0 RaidUnitAllocateResources , Binary: storport.sys
TOTAL 29794 126262872 36446 17757664
6. Leak 이라는 pool tag가 약 110 M 이상의 Nonpaged pool을 사용하고 있음을 확인 할 수 있습니다.
7. 실제 그럼 Leak이라는 Pooltag를 어떤 드라이버가 사용을 하는지 확인을 하기 위해 명령프롬프틍서 아래와 같은 명령어를 입력 합니다.
C:\WINDOWS\system32\drivers>findstr /m /l Leak *.sys
myfault.sys
8. Memory Leak 테스트를 위해 실행 한 NotMyFault 프로그램의 시스템 드라이버인 myfault.sys 라는 시스템 드라이버가 많은 메모리를 사용 함을 확인 할 수 있습니다.
감사합니다.