다음을 통해 공유


애플리케이션 또는 서비스 충돌 동작 문제 해결 지침

이 문서에서는 애플리케이션 또는 서비스 충돌 동작 문제를 해결하는 방법에 대한 지침을 제공합니다.

적용 대상: 지원되는 모든 버전의 Windows Server 및 Windows 클라이언트

애플리케이션 로그에 이벤트 ID 1001 및 이벤트 ID 1000이 반복적으로 표시되면 애플리케이션 충돌 동작을 나타냅니다. 이는 자사 또는 타사 프로세스와 함께 발생하며 가능한 오류 모듈을 가리킵니다.

이 문서에서는 이벤트를 확인하고, 이벤트의 정보를 이해하고, 자사 또는 타사 애플리케이션인지 여부에 따라 이벤트를 처리하는 프로세스를 자세히 설명합니다. 이 프로세스에서는 Windows 용 디버깅 도구가 사용됩니다.

시작하기 전에

고려 사항:

  • 설치된 운영 체제 버전에 대한 최신 업데이트를 실행하고 있는지 확인합니다.
  • 영향을 받은 애플리케이션이 최신 상태인지 확인합니다.
  • 바이러스 백신 소프트웨어가 설치된 경우 최신 버전에서 실행 중이고 필요한 제외가 있는지 확인합니다.

이벤트 ID 1001 level 정보는 시스템에서 WER(Windows 오류 보고)이 사용되는지 여부를 보여 줍니다. 그러나 조사에 필요한 정보를 수집 level 하도록 이 서비스를 변경해야 합니다. 시스템은 약간의 성능 오버헤드를 방지하기 위해 기본적으로 이 정보를 기록하지 않습니다.

수준이 있는 이벤트 ID 1000 Error 은 실제 애플리케이션 충돌 이벤트입니다. 다음 정보를 예로 표시합니다.

Log Name:      Application
Source:        Application Error
Date:          <Date Time>
Event ID:      1000
Task Category: Application Crashing Events
Level:         Error
Keywords:      
User:          SYSTEM
Computer:      demo.contoso.com
Description:
Faulting application name: netsh.exe, version: 10.0.22621.1, time stamp: 0x13af0815
Faulting module name: netsh.exe, version: 10.0.22621.1, time stamp: 0x13af0815
Exception code: 0xc0000005
Fault offset: 0x0000000000005399
Faulting process id: 0x0xFEE4
Faulting application start time: 0x0x1DAB66BB5BE07D4
Faulting application path: C:\WINDOWS\system32\netsh.exe
Faulting module path: C:\WINDOWS\system32\netsh.exe
Report Id: <Report ID>
Faulting package full name: 
Faulting package-relative application ID:

Microsoft 모듈을 오류 모듈(예: ntdll.dll, kernel32.dllkernelbase.dll)으로 표시하는 경우가 많습니다. 이러한 모듈은 프로세스가 실행되고 사용자 모드와 커널 모드 간에 전환되는 동안 많이 사용됩니다. 이 과정에서 모듈을 잘못 실행하여 이전에 수행한 다른 유형의 부패의 희생자로 적발됩니다.

일반적인 예외:

  • 0xc0000022

    STATUS_ACCESS_DENIED

  • 0xc0000005

    STATUS_ACCESS_VIOLATION

  • 0xc0000374

    STATUS_HEAP_CORRUPTION

예외가 발생하면 프로세스에 대해 자세한 정보 로깅을 사용하도록 설정하고 WER(Windows 오류 보고) 및 GFlags(gflags.exe)를 사용하여 전체 프로세스 덤프를 수집할 수 있습니다.

도구에 포함된 대로 windows 용 디버깅 도구를 설치하여 gflags.exe 가져옵니다. 그러나 문제 해결이 필요한 컴퓨터에 도구를 설치하지 않고 파일을 복사하기만 하면 됩니다.

데이터 수집

netsh.exe 충돌의 앞의 예제에서는 크래시 발생 원인에 대한 자세한 내용을 보려면 덤프를 수집하도록 컴퓨터를 설정합니다. netsh.exe 디바이스의 이벤트 ID 1000에서 식별된 실행 파일로 바꿉니다.

  1. 관리자 권한 명령 프롬프트에서 다음 명령을 실행하여 예외의 전체 프로세스 덤프를 수집하도록 WER을 설정합니다.

    reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\netsh.exe"
    
    reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\netsh.exe"/v DumpFolder /t REG_EXPAND_SZ /d "C:\WER" /f
    
    md C:\WER
    
    reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\netsh.exe" /v DumpCount /t REG_DWORD /d 10 /f
    
    reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\netsh.exe" /v DumpType /t REG_DWORD /d 2 /f
    
    reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\LocalDumps\netsh.exe"
    
    reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\LocalDumps\netsh.exe" /v DumpFolder /t REG_EXPAND_SZ /d "C:\WER" /f
    
    reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\LocalDumps\netsh.exe" /v DumpCount /t REG_DWORD /d 10 /f
    
    reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\LocalDumps\netsh.exe" /v DumpType /t REG_DWORD /d 2 /f
    

    이러한 명령을 사용하면 netsh.exe 프로세스의 전체 프로세스 덤프를 최대 10개까지 수집하여 C:\WER 폴더에 저장할 수 있습니다.

    참고 항목

    Windows on Windows 64(WOW64) 레지스트리 위치가 추가되어 64비트 시스템에서 32비트 애플리케이션을 실행할 수 있습니다.

  2. 손상을 추적하기 위해 힙 할당을 모니터링하도록 GFlags를 설정합니다.

    도구가 있는 디렉터리로 이동하고 관리자 권한 명령 프롬프트에서 다음 명령을 실행합니다.

    페이지 힙 사용(hpa) 플래그를 켜려면:

    Gflags.exe /i netsh.exe +hpa
    

    페이지 힙 사용 플래그를 해제하려면 다음을 수행합니다.

    Gflags.exe /i netsh.exe -hpa
    

    설정을 적용하려면 프로세스를 다시 시작합니다.

  3. C:\WER 폴더를 모니터링하고 생성된 덤프를 확인합니다.

데이터 분석

프로세스 덤프가 있으면 다음을 수행할 수 있습니다.

  • 프로세스가 타사 프로세스인 경우 조사를 위해 관련 덤프를 제3자에게 공유합니다.
  • 프로세스가 자사 프로세스인 경우 데이터를 분석하려면 Microsoft 지원 문의하세요.
  • Windows용 디버깅 도구를 사용하여 설치된 디버거(windbg.exe)를 사용하고 !analyze 확장을 사용하여 오류 모듈을 확인합니다.

데이터를 수집하고 조사를 완료한 후 레지스트리 키(프로세스 이름을 가진 키)를 삭제하고 GFlags에 대한 페이지 힙 사용 플래그를 해제합니다.