High CPU utilization 이슈를 Troubleshooting 하기 위한 자료 수집
자료 수집 구분을 위해 아래 사항을 확인합니다.
1. 어떤 프로세스가 대부분의 CPU time 을 사용하고 있는가?
2. CPU time 이 Kernel mode 에 있는지 User mode 에 있는지?
(Process Explorer, Task Manager, Qslice : Kernel - Red, User - Green)
만약 CPU time 이 3rd party 프로세스에 있다면, 3rd party 업체에 적절한 담당자를 Engage 합니다.
만약 CPU time 이 System 프로세스가 아닌 특정 프로세스에 있고, 대부분 User time 에 있다면,
1. Threads 를 포함한 표준 Counters를 포함하여 Performance log 를 시작합니다.
2. 증상이 나타나는 동안 Adplus 툴을 통해 해당 프로세스에 대해 3개의 User dump 를 생성합니다.
만약 CPU time 이 System 프로세스가 아닌 특정 프로세스에 있고, 대부분 Kernel 또는 Kernel 과
User 사이에 나눠져 있다면,
1. Memory dump 수집을 위한 설정을 합니다.
2. Threads 를 포함한 기본 Counters를 포함하여 Performance log 를 시작합니다.
3. 증상이 나타나는 동안 Adplus 툴을 통해 해당 프로세스에 대해 3개의 User dump 를 생성합니다.
4. 증상이 나타나는 동안 전체 메모리 덤프를 수집합니다.
만약 CPU time 이 System 프로세스에 있다면,
1. Memory dump 수집을 위한 설정을 합니다.
2. Threads 를 포함한 기본 Counters를 포함하여 Performance log 를 시작합니다
3. CPU time 을 소모하는 Thread 에 드라이버를 Map 하기 위해 아래 단계를 진행합니다.
만약, Core OS component를 다시 가리킨다면, Memory dump 가 필요합니다.
4. 증상이 나타나는 동안 전체 메모리 덤프를 수집합니다.
Device driver를 System thread 에 Map 하는 방법
- 단일 또는 그룹의 Threads 가 CPU의 Primary consumer 인지를 확인합니다.
- Perfmon 에서 이 Thread(s) 의 시작 주소(10진수)를 수집합니다.
- 계산기 Calc.exe 를 통해 10진수(Decimal) 주소를 16진수(Hex)로 변환합니다.
- 이 주소를 Pstat 의 끝에 로드된 Driver 에 Match 시킵니다.
이 방법으로 High CPU 를 사용하고 있는 Driver를 확인합니다.
참고
< Perfmon 로그 수집 - 기본 Counters >
1. 시작 - 실행에서 cmd를 실행합니다.
2. Perfmon에 Counters를 추가하기 위해 아래 명령을 입력 후 실행합니다. (예: 수집 간격: 5분, 250MB)
Logman.exe create counter Perf-Counter-Log -o "c:\perflogs\Perftest.blg" -f bincirc -v mmddhhmm -max 250 -c "\LogicalDisk(*)\*" "\Memory\*" "\Network Interface(*)\*" "\Paging File(*)\*" "\PhysicalDisk(*)\*" "\Processor(*)\*" "\Process(*)\*" "\Redirector\*" "\Server\*" "\System\*" -si 00:05:00
참고: 필요에 따라 수집 간격 00:05:00 (5분)을 변경합니다.
3. 아래 명령으로 Log를 시작합니다.
Logman.exe start Perf-Counter-Log
문제가 되는 동안의 기간을 기다립니다.
4. 아래 명령으로 Log를 중지합니다.
Logman.exe stop Perf-Counter-Log
< Adplus 로 User dump 생성 방법 >
1. 아래 링크를 클릭하셔서 최신 버전의 Windows debugger 툴을 문제의 시스템에 설치합니다.
<32bit 운영 체제>
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
<64bit 운영 체제>
http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspx
2. 덤프 파일을 저장할 위치에 대한 C:\temp\dump 폴더를 생성합니다.
3. 작업 관리자에서 문제의 프로세스에 대한 PID를 확인합니다.
4. 도스창을 실행하신 후 Debugging Tools for Windows 가 설치된 폴더로 이동하신 후 아래를 실행합니다.
<PID> 는 위의 3번에서 확인한 PID 번호입니다.
C:\Program Files\Debugging Tools for Windows> Adplus -hang -p <PID> -o c:\temp\dump
(위의 명령 실행 시 Defaul script interpreter를 WScript.exe 에서 CScript.exe로 변경한다는 안내 창을
받을 수 있습니다. CScript로 변경하는 이 메시지에 OK를 누르십시오. 또한, _NT_SYSBOL_PATH 가 설정되어야
된다는 메시지를 오류 메시지는 무시합니다).
참고!
286350 How To Use ADPlus to Troubleshoot "Hangs" and "Crashes"
http://support.microsoft.com/?id=286350
< Memory dump 수집을 위한 설정>
1. 시작 - 실행에서 regedit 을 실행하여 레지스트리 편집기를 오픈합니다.
2. 아래 레지스트리 키 위치에서 “편집 - 새로 만들기 - DWORD 값"을 선택하신 후 아래 정보에 맞게
데이타를 추가합니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters (PS/2 키보드)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters (USB 키보드)
값 이름: CrashOnCtrlScroll
값 형식: REG_DWORD
값 데이타: 1
3. 덤프 유형 설정을 위해 아래 레지스트리 키 위치로 이동합니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl
3. 해당 키의 CrashDumpEnabled 값을 두 번 클릭하신 후 데이타를 1로 설정합니다.
참고: 1은 전체 메모리 덤프, 2는 커널 메모리 덤프, 3은 작은 메모리 덤프
4. 레지스트리 편집기 창을 종료합니다.
5. 설정 변경 적용을 위해 시스템을 재 시작합니다.