Welcome to TechNet Blogs Sign in | Join | Help

Escape From The Troubles

한국 마이크로소프트 플랫폼팀 블로그
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. 설정 변경 적용을 위해 시스템을 재 시작합니다.

Posted: Sunday, September 27, 2009 9:50 PM by escapetrouble

Comments

No Comments

Anonymous comments are disabled
Page view tracker