이 문서에서는 모든 Windows 운영 체제에서 WMI(Windows Management Instrumentation) 높은 CPU 사용 문제를 진단하는 방법을 설명합니다.
문제 식별
대부분의 시나리오에서 CPU는 WmiPrvse.exe 프로세스에서 사용되며 WMI 서비스(Winmgmt)를 호스트하는 svchost.exe 높은 CPU 사용량을 사용하는 몇 가지 인스턴스가 있습니다.
작업 관리자의 프로세스 창 또는 세부 정보 창을 검토하여 정확한 프로세스를 식별합니다.
프로세스가 WmiPrvse.exe 또는 svchost.exe(WMI 서비스 Winmgmt 호스팅)인지 확인하고 프로세스 ID를 식별합니다.
참고 항목
작업 관리자에서 모든 프로세스의 프로세스 ID를 보려면 PID 열을 수동으로 추가해야 할 수 있습니다.
예를 들어 다음과 같습니다. 작업 관리자>세부 정보로 이동한 다음 이름별로 정렬하고 높은 CPU 사용량을 사용하는 WmiPrvse.exe 프로세스를 찾습니다. PID(프로세스 ID)를 기록해 둡니다.
이 스크린샷은 WMI 공급자 호스트(WmiPrvse.exe 프로세스)의 여러 인스턴스를 활성 및 CPU 사용률로 보여 줍니다.
이 스크린샷은 서비스 호스트: Windows 관리 계측(svchost.exe Winmgmt 서비스 호스팅) 및 해당 CPU 사용률을 보여줍니다.
작업 관리자>서비스로 이동하여 이름을 기준으로 정렬하고 Winmgmt 서비스를 찾습니다. PID를 기록해 둡다. 서비스를 마우스 오른쪽 단추로 클릭하고 세부 정보로 이동하여 다음과 같이 svchost.exe 프로세스를 찾습니다.
이 예제에서는 세 개의 WmiPrvse.exe 인스턴스 중에서 CPU 사용량의 약 25%를 사용하는 PID 3648이 있습니다. Winmgmt는 PID 2752의 svchost.exe 프로세스에 따라 호스팅됩니다.
CPU 사용량 이해
여기에는 주로 전체 CPU 사용량 및 식별된 PID를 관찰하는 작업이 포함됩니다. CPU 사용량의 시기, 방법 및 빈도를 유의해야 합니다.
특정 시간 동안 CPU 사용량이 높은지 이해하여 상황을 평가합니다. 활성 상태인 특정 작업 또는 서비스 실행, 모니터링 애플리케이션 실행 또는 WmiPrvse.exe 또는 Winmgmt 높은 CPU로 이어지는 스크립트 실행과 같은 활동이 있는지 확인합니다.
패턴이 있는지 이해합니다. 즉, CPU 사용량이 일관되거나, 일관되지 않거나, 임의적이거나, 산발적이거나, 정기적으로 급증합니다.
CPU 사용 빈도를 식별합니다. 프로덕션 시간, 업무 외 시간 또는 임의 시간 중에만 발생하는지 확인합니다. 또한 사용자 로그인 또는 로그아웃과 같은 특정 활동 중에 발생할 수 있습니다.
작업 관리자를 사용하여 CPU 사용 패턴이 어떻게 표시되는지 시각적으로 기록할 수 있습니다.
다음은 성능 모니터(Perfmon) 도구를 사용하여 식별한 PID로 WmiPrvse.exe 정확한 인스턴스를 식별하는 방법을 보여 주는 예제입니다. 모든 프로세스(WmiPrvse.exe 또는 svchost.exe 호스팅 WMI 서비스)의 CPU 사용량에 대한 그래픽 보기를 가져올 수도 있습니다.
관리자 권한 명령 프롬프트를 열고 Perfmon을 입력 합니다.
왼쪽 창에서 성능 모니터 선택하고 오른쪽 창에서 더하기 기호(+)를 선택하여 카운터 추가 창을 엽니다.
프로세스를 확장하고 ID 프로세스를 선택합니다. 모든 WmiPrvse# 인스턴스를 선택한 다음 확인 추가>를 선택합니다.
카운터 추가 창에서 프로세스를 확장하고 %Processor Time을 선택합니다. 높은 CPU 사용량을 사용하는 PID와 일치하는 WmiPrvse#을 선택한 다음 확인 추가>를 선택합니다.
"ID 프로세스" 카운터의 경우 마지막, 평균, 최소 및 최대 값은 모두 각 WmiPrvse.exe 프로세스의 PID를 나타냅니다. 높은 CPU 사용량을 사용하는 정확한 인스턴스를 확인한 후에는 Delete 키를 눌러 목록에서 나머지 WmiPrvse# 인스턴스 인스턴스를 제거할 수 있습니다.
이 예제에서는 WMIPRVSE.EXE PID 556이 높은 CPU 사용량을 사용하고 있으며, 성능 모니터 PID 556과 일치하는 WmiPrvse#1입니다.
그런 다음 카운터 %Processor Time of WmiPrvse#1 이 추가되어 이 프로세스의 CPU 사용량에 대한 라이브 그래픽 보기를 볼 수 있습니다. 이 예제에서 WmiPrvse#1의 %Processor Time 색은 노란색에서 빨간색으로 변경됩니다.
이 단계는 Wmimgmt 서비스를 호스트하는 svchost.exe 높은 CPU 사용량의 경우 성능 모니터 올바른 svchost#을 찾는 것과 동일합니다.
WMI 서비스를 호스트하는 svchost.exe 프로세스가 높은 CPU 사용량을 유발하고 WMI가 문제에 기여하고 있다고 의심하는 경우 다음 명령을 실행하여 svchost.exe 프로세스의 PID가 WMI 서비스를 호스팅하고 있는지 확인할 수 있습니다.
tasklist /svc /fi "Services eq Winmgmt"
svchost.exe 프로세스에 여러 서비스가 포함된 경우 다음 단계를 수행하여 WMI 서비스를 자체 svchost.exe 프로세스로 분리할 수 있습니다.
관리자 권한으로 관리자 권한 명령 프롬프트를 엽니다.
다음 명령을 실행합니다.
sc config Winmgmt type= own
WMI 서비스를 다시 시작합니다.
서비스를 다시 시작한 후 명령을 실행 Tasklist /svc
하여 Winmgmt 서비스가 자체 svchost.exe 프로세스에서 실행되고 있는지 확인할 수 있습니다.
문제를 해결하거나 더 이상 서비스가 자체 svchost.exe 프로세스에 있을 필요가 없으면 공유 svchost.exe 프로세스에 다시 배치할 수 있습니다. 명령 프롬프트에서 다음 명령을 실행한 다음 WMI 서비스를 다시 시작하여 작업을 수행할 수 있습니다.
sc config Winmgmt type= share
WmiPrvse.exe 진단
지금까지 높은 CPU 사용량을 소비하는 WmiPrvse.exe 정확한 PID만 있습니다. 다음으로, 이 PID에 대해 가능한 한 많은 정보를 수집합니다. 이렇게 하면 상황을 평가하거나 문제를 일으킬 수 있는 항목을 식별할 수 있습니다. 다른 리소스 사용량에 대한 정보를 수집하거나 식별된 WmiPrvse.exe PID에서 호스트하는 정확한 WMI 공급자(DLL)를 식별합니다.
메모리, 핸들, 스레드 및 사용자 이름과 같은 기타 리소스 사용
CPU 사용량이 많은 시점에 메모리, 핸들, 스레드 및 사용자 이름과 같은 다른 리소스 사용량에 대한 정보를 수집합니다. 작업 관리자에서 세부 정보 탭을 사용하고 정확한 PID를 선택한 다음 검토할 수 있습니다.
참고 항목
필요에 따라 열을 더 추가합니다.
식별된 WmiPrvse.exe PID에서 호스트하는 정확한 WMI 공급자(DLL) 식별
WmiPrvSE.exe 프로세스에 로드된 공급자를 식별하는 여러 가지 방법이 있습니다.
스크립트 사용 : 실행 중인 모든 WMI 공급자를 나열하여 실행 중인 모든 WMI(Windows Management Instrumentation) 공급자를 출력합니다.
프로세스 탐색기는 식별된 PID에서 호스트되는 정확한 공급자를 식별하는 데 도움이 될 수 있습니다. 다음 단계를 수행합니다.
프로세스 탐색기를 관리자 권한으로 실행합니다. 식별된 WmiPrvse.exe PID를 찾고, 해당 속성으로 이동한 다음, WMI 공급자 탭을 선택합니다.
다음 예제 에서 WmiPrvse.exe PID 556이 있으며 호스팅 중인 것으로 확인되었습니다.
- WMI 공급자:
MS_NT_EVENTLOG_PROVIDER
- 네임스페이스:
root\CIMV2
- DLL 경로: %systemroot%\system32\wbem\ntevt.dll
- WMI 공급자:
대부분의 경우 둘 이상의 공급자가 로드될 수 있습니다. CPU에서 시간을 소비하여 높은 CPU 문제를 일으키는 공급자일 수 있습니다.
경우에 따라 문제가 간헐적이거나 드물게 발생하는 경우 문제의 원인이 되는 WmiPrvse.exe 시간이 지남에 따라 종료될 수 있습니다. 문제가 다시 발생하면 새 WmiPrvse.exe 인스턴스에서 동일한 공급자일 수 있습니다. 이 경우 공급자가 적어지면 다음 cmdlet을 실행하여 해당 공급자를 포함하는 WmiPrvse.exe 프로세스의 현재 PID를 표시합니다.
tasklist /m <Provider DLL>
예를 들어 다음과 같습니다.
tasklist /m ntevt.dll
따라서 WmiPrvse.exe 프로세스에서 로드되는 공급자를 이해하고 매번 WmiPrvse.exe 프로세스의 PID를 기록해 두는 것이 중요합니다.
WmiPrvse.exe 로드되어 CPU 사용량이 많은 공급자가 있으면 작업을 처리하는지 이해할 수 있습니다.
작업은 클라이언트 프로세스에서 WMI 서비스에 제출한 다음 적절한 WMI 공급자 프로세스에 할당되는 들어오는 WMI 쿼리일 수 있습니다. 이 예제에서는 태스크가 공급자에게 MS_NT_EVENTLOG_PROVIDER
제출됩니다. 따라서 다음 단계는 공급자에게 들어오는 쿼리 및 작업을 연구하는 MS_NT_EVENTLOG_PROVIDER
것입니다.
들어오는 쿼리 분석
들어오는 쿼리를 검사하려면 다음이 포함됩니다.
- 높은 CPU 사용량을 유발하는 WMI 공급자가 처리하는 WMI 쿼리를 식별합니다.
- WMI 클래스 쿼리입니다.
- 연결된 사용자입니다.
- 쿼리를 시작하는 클라이언트 프로세스입니다.
위의 정보는 공개적으로 사용 가능한 도구 WMIMon 또는 WMI 활동 작동 로그 및 이벤트 뷰어 사용 가능한 WMI 추적을 사용하여 수집할 수 있습니다.
운영 로그: Microsoft-Windows-WMI-Activity/Operational
들어오는 쿼리는 다음에서 사용할 수 있는 Microsoft-Windows-WMI-Activity/Operational 로그에 작업 이벤트로 기록됩니다.
이벤트 뷰어Applications 및 Services>로그 Microsoft>Windows>WMI-Activity>
여러 유형의 이벤트가 기록됩니다.
높은 CPU를 사용하는 WmiPrvse.exe 프로세스가 수시로 종료되고 로드되는 공급자를 이미 알고 있는 경우 다음 이벤트는 해당 공급자를 호스팅하는 현재 활성 WmiPrvse.exe 프로세스를 결정하는 데 도움이 될 수 있습니다.
Log Name: Microsoft-Windows-WMI-Activity/Operational
Source: Microsoft-Windows-WMI-Activity
Event ID: 5857
Task Category: None
User: NETWORK SERVICE
Description:
MS_NT_EVENTLOG_PROVIDER provider started with result code 0x0. HostProcess = wmiprvse.exe; ProcessID = 556; ProviderPath = %systemroot%\system32\wbem\ntevt.dll
WMI 추적을 사용하도록 설정하려면 "분석 및 디버그 로그"를 사용하도록 설정합니다.
이벤트 뷰어 보기 분석 및 디버그 로그 보기를>선택하여 WMI 작업에 대한 디버그 및 추적을 사용하도록 설정합니다.
디버그 및 추적은 기본적으로 사용하지 않도록 설정되며, 추적 또는 디버그를 마우스 오른쪽 단추로 클릭한 다음 로그 사용을 선택하여 각 디버그를 수동으로 사용하도록 설정할 수 있습니다.
참고 항목
분석 및 디버그 로그 표시를 사용하도록 설정하면 거의 모든 이벤트 원본에 대한 디버그 및 추적이 가능하며 추가 로깅이 만들어집니다. 따라서 조사가 완료되면 이 기능을 사용하지 않도록 설정해야 하며 더 이상 사용되지 않습니다.
이 추적은 WmiPrvse.exe 프로세스에서 높은 CPU 사용량을 관찰하는 동안 또는 높은 CPU 사용량의 동작을 캡처하여 추적을 보다 쉽게 분석할 수 있도록 로그를 깨끗하고 적당히 크기로 유지할 수 있을 만큼 충분히 오래 유지됩니다.
추적을 마우스 오른쪽 단추로 클릭하고 다른 이름으로 모든 이벤트 저장을 선택하여 추적 을 내보냅니다.
형식으로 저장을 선택
.xml
하거나.csv
저장합니다.참고 항목
필요에 따라
.EVTX
다른 친숙한 형식을 선택할 수 있습니다.추적 파일의 원하는 언어를 선택합니다.
WMI-Activity Operational 이벤트도 검토 및 분석할 수 있도록 원하는 형식으로 별도로 저장하도록 선택할 수 있습니다.
WMI 추적 파일 검토
WMI 추적 내에는 들어오는 WMI 쿼리의 일부인 여러 가지 중요한 작업이 포함되어 있습니다. 작업은 IWbemServices 인터페이스(wbemcli.h)에 설명되어 있습니다.
중요한 작업 중 일부는 다음과 같습니다.
IWbemServices::ExecQuery
메서드(wbemcli.h)IWbemServices::ExecMethod
메서드(wbemcli.h)IWbemServices::ExecQueryAsync
메서드(wbemcli.h)
저장된 WMI 추적 CSV 파일의 로그 항목 중 하나는 다음과 같습니다.
수준 | 날짜 및 시간 | 원본 | 이벤트 ID | 작업 범주 | 설명 |
---|---|---|---|---|---|
정보 | 05-05-23 14:48 | Microsoft-Windows-WMI-Activity | 11 | None | CorrelationId = {345E5566-0000-0000-0000-68343241D901}; GroupOperationId = 30693; OperationId = 30694; Operation = Start IWbemServices::ExecQuery - root\cimv2 : select * from Win32_Product; ClientMachine = 21H2W10M; User = CONTOSO\<UserName>; ClientProcessId = 5484; NamespaceName = 133277000000783520 |
XML 형식의 유사한 이벤트는 다음과 같습니다.
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Microsoft-Windows-WMI-Activity" Guid="{1418ef04-b0b4-4623-bf7e-d74ab47bbdaa}"/>
<EventID>11</EventID>
<Version>0</Version>
<Level>4</Level>
<Task>0</Task>
<Opcode>0</Opcode>
<Keywords>0x8000000000000000</Keywords>
<TimeCreated SystemTime="2023-05-05T13:09:18.7442455Z"/>
<EventRecordID>112</EventRecordID>
<Correlation ActivityID="{eddc1bfb-0000-0000-0000-18b6cabf5949}"/>
<Execution ProcessID="2752" ThreadID="4132"/>
<Channel>Microsoft-Windows-WMI-Activity/Trace</Channel>
<Computer>21H2W10M.contoso.com</Computer>
<Security UserID="S-1-5-18"/>
</System>
<UserData>
<Operation_New xmlns="http://manifests.microsoft.com/win/2006/windows/WMI">
<CorrelationId>{345E5566-0000-0000-0000-67343241D901}</CorrelationId>
<GroupOperationId>28089</GroupOperationId>
<OperationId>28090</OperationId>
<Operation>Start IWbemServices::ExecQuery - root\cimv2 : select * from Win32_Product</Operation>
<ClientMachine>21H2W10M</ClientMachine>
<ClientMachineFQDN>21H2W10M.contoso.com</ClientMachineFQDN>
<User>CONTOSO\<UserName></User>
<ClientProcessId>5484</ClientProcessId>
<ClientProcessCreationTime>133277000000783520</ClientProcessCreationTime>
<NamespaceName>\\.\root\cimv2</NamespaceName>
<IsLocal>true</IsLocal>
</Operation_New>
</UserData>
<RenderingInfo Culture="en-US">
<Message>CorrelationId = {345E5566-0000-0000-0000-67343241D901}; GroupOperationId = 28089; OperationId = 28090; Operation = Start IWbemServices::ExecQuery - root\cimv2 : select * from Win32_Product; ClientMachine = 21H2W10M; User = CONTOSO\<UserName>; ClientProcessId = 5484; NamespaceName = 133277000000783520</Message>
<Level>Information</Level>
<Task/>
<Opcode>Info</Opcode>
<Channel/>
<Provider>Microsoft-Windows-WMI-Activity</Provider>
<Keywords/>
</RenderingInfo>
</Event>
위의 샘플 작업 출력에서 다음 정보를 얻고 이해할 수 있습니다.
- 쿼리가 시작됨: 2023-05-05 13:09:18
- 컴퓨터: 21H2W10M,
- 클라이언트 PID에서: 5484
- 작업 ID: 28089
- 쿼리:
select * from Win32_Product
- 네임스페이스:
\\.\root\cimv2
- 수술:
IWbemServices::ExecQuery
다른 로그는 다음과 같습니다.
수준 | 날짜 및 시간 | 원본 | 이벤트 ID | 작업 범주 | 설명 |
---|---|---|---|---|---|
정보 | 05-05-23 14:47 | Microsoft-Windows-WMI-Activity | 12 | None | ProviderInfo for GroupOperationId = 30641; Operation = Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent; HostID = 556; ProviderName = MS_NT_EVENTLOG_PROVIDER; ProviderGuid = {FD4F53E0-65DC-11d1-AB64-00C04FD9159E}; Path = %systemroot%\system32\wbem\ntevt.dll |
XML 형식의 동일한 이벤트:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Microsoft-Windows-WMI-Activity" Guid="{1418ef04-b0b4-4623-bf7e-d74ab47bbdaa}"/>
<EventID>12</EventID>
<Version>0</Version>
<Level>4</Level>
<Task>0</Task>
<Opcode>0</Opcode>
<Keywords>0x8000000000000000</Keywords>
<TimeCreated SystemTime="2023-05-05T13:09:18.8438242Z"/>
<EventRecordID>120</EventRecordID>
<Correlation ActivityID="{2a353ead-0000-0000-0000-256f9de5fabd}"/>
<Execution ProcessID="2752" ThreadID="4348"/>
<Channel>Microsoft-Windows-WMI-Activity/Trace</Channel>
<Computer>21H2W10M.contoso.com</Computer>
<Security UserID="S-1-5-21-0000000000-0000000000-00000000-1103"/>
</System>
<UserData>
<Operation_Provider_Info_New xmlns="http://manifests.microsoft.com/win/2006/windows/WMI">
<GroupOperationId>28096</GroupOperationId>
<Operation>Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent</Operation>
<HostId>556</HostId>
<ProviderName>MS_NT_EVENTLOG_PROVIDER</ProviderName>
<ProviderGuid>{FD4F53E0-65DC-11d1-AB64-00C04FD9159E}</ProviderGuid>
<Path>%systemroot%\system32\wbem\ntevt.dll</Path>
</Operation_Provider_Info_New>
</UserData>
<RenderingInfo Culture="en-US">
<Message>ProviderInfo for GroupOperationId = 28096; Operation = Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent; HostID = 556; ProviderName = MS_NT_EVENTLOG_PROVIDER; ProviderGuid = {FD4F53E0-65DC-11d1-AB64-00C04FD9159E}; Path = %systemroot%\system32\wbem\ntevt.dll</Message>
<Level>Information</Level>
<Task/>
<Opcode>Info</Opcode>
<Channel/>
<Provider>Microsoft-Windows-WMI-Activity</Provider>
<Keywords/>
</RenderingInfo>
</Event>
두 번째 예제의 작업 출력에서 다음 정보를 얻고 이해할 수 있습니다.
- Operation CreateInstanceEnum은 SID를 사용하여 사용자를 대신하여 시작됩니다. UserID="S-1-5-21-00000000000-00000000000-00000000-1103"
- 2023-05-05 13:09
- 정확한 작업:
Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent
- 호스트 ID: 556
- 공급자 이름:
MS_NT_EVENTLOG_PROVIDER
- 공급자 경로: %systemroot%\system32\wbem\ntevt.dll
높은 CPU 사용량을 유발하는 클라이언트 PID 찾기
이 로그 파일을 검토하는 방법은 높은 CPU 사용량을 사용하는 식별된 WmiPrvse.exe PID와 연결된 작업을 나열하고, 들어오는 쿼리를 이해하고, 해당 쿼리를 시작하는 사람(클라이언트 프로세스)을 나열하는 것입니다.
위에서 설명한 예제에서는 높은 CPU 사용량을 유발하는 PID 552입니다.
로그 출력의 두 번째 예제에서 CreateInstanceEnum 작업은 특정 WMI 클래스Win32_NTLogEvent
에 대해 시작됩니다.
자세한 내용은 WMI 클래스와 연결된 WMI 공급자 세부 정보를 포함하는 Win32_NTLogEvent 참조하세요.
이제 높은 CPU 사용량, 호스트 ID(MS_NT_EVENTLOG_PROVIDER
552) 및 일부 클라이언트 프로세스에서 쿼리되는 WMI 클래스(Win32_NTLogEvent)를 발생시키는 WmiPrvse.exe 호스트된 정확한 WMI 공급자()를 알 수 있습니다.
추적 파일을 검토하는 데 사용하는 도구에 따라 필요한 필터를 적용하여 PID 552 또는 호스트 ID 552 또는 ntevt.dll 관련된 Win32_NTLogEvent
작업만 검토하거나 WmiPrvse.exe 수 있습니다.
필터에서 "Win32_NTLogEvent"을 포함하는 줄 또는 작업만 표시하면 결과는 다음과 같습니다.
수준 | Source | 이벤트 ID | 설명 |
---|---|---|---|
정보 | Microsoft-Windows-WMI-Activity | 11 | CorrelationId = {345E5566-0000-0000-0000-68343241D901}; GroupOperationId = 30641; OperationId = 30642; Operation = Start IWbemServices::CreateInstanceEnum - root\cimv2 : Win32_NTLogEvent; ClientMachine = 21H2W10M; User = CONTOSO\<UserName>; ClientProcessId = 5484; NamespaceName = 133277000000783520 |
정보 | Microsoft-Windows-WMI-Activity | 12 | ProviderInfo for GroupOperationId = 30641; Operation = Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent; HostID = 556; ProviderName = MS_NT_EVENTLOG_PROVIDER; ProviderGuid = {FD4F53E0-65DC-11d1-AB64-00C04FD9159E}; Path = %systemroot%\system32\wbem\ntevt.dll |
정보 | Microsoft-Windows-WMI-Activity | 11 | CorrelationId = {345E5566-0000-0000-0000-68343241D901}; GroupOperationId = 30697; OperationId = 30698; Operation = Start IWbemServices::CreateInstanceEnum - root\cimv2 : Win32_NTLogEvent; ClientMachine = 21H2W10M; User = CONTOSO\<UserName>; ClientProcessId = 5484; NamespaceName = 133277000000783520 |
정보 | Microsoft-Windows-WMI-Activity | 12 | ProviderInfo for GroupOperationId = 30697; Operation = Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent; HostID = 556; ProviderName = MS_NT_EVENTLOG_PROVIDER; ProviderGuid = {FD4F53E0-65DC-11d1-AB64-00C04FD9159E}; Path = %systemroot%\system32\wbem\ntevt.dll |
위의 작업에서 다음 추가 정보를 가져올 수 있습니다.
- Timestamp
- 작업 ID: 30642;
- 정확한 작업 =
Start IWbemServices::CreateInstanceEnum - root\cimv2 : Win32_NTLogEvent
; - 클라이언트 컴퓨터 = 21H2W10M
- User = CONTOSO\<UserName>
- 쿼리를 시작한 클라이언트의 PID: 5484
마침내 클라이언트 프로세스 5484의 PID가 있으며, 이 프로세스는 쿼리를 시작합니다 Win32_NTLogEvent
. 이는 공급자 MS_NT_EVENTLOG_PROVIDER
가 처리하고 WmiPrvse.exe PID 552에서 호스트되며, 이로 인해 CPU 사용량이 높습니다.
클라이언트 PID의 범위를 좁히면 다음 도구 중 하나를 사용하여 프로세스 이름을 찾습니다.
WmiMon에 대한 자세한 정보
WMImon.exe 시스템 이벤트 추적 및 모니터링 및 WMI 서비스의 리소스 사용을 허용하는 강력한 모니터링 도구입니다.
다른 프로세스에서 수행한 WMI 호출 및 쿼리를 식별하고 쿼리 빈도, 쿼리에 사용되는 사용자 계정 및 요청된 정보에 대한 정보를 제공하는 중요한 기능을 제공합니다.
이 데이터는 성능 문제를 해결해야 하는 시스템 관리자에게 유용할 수 있습니다.
이 데이터를 수집하고 분석하려면 단계별 지침을 따를 수 있습니다.
- 위에서 설명한 방법을 사용하여 CPU 사용량을 사용하는 WmiPrvSE.exe PID를 식별합니다.
- GitHub - luctalpe/WMIMon에서 WMIMon.exe 도구를 다운로드합니다. 이 도구는 Windows에서 WMI 작업을 모니터링하는 것입니다.
- 컴퓨터의 폴더에 WMIMon_Binaries.zip 파일의 내용을 추출합니다.
- 관리자 권한으로 명령 프롬프트를 열고 WMIMon 파일을 추출한 폴더로 이동합니다.
- 명령 프롬프트를 입력
WMIMon.exe
하고 Enter 키를 눌러 WMIMon.exe 파일을 실행합니다. - 이제 WMIMon은 1단계에서 식별된 WMI 호출을 포함하여 시스템의 프로세스에서 수행한 WMI 호출을 모니터링하기 시작합니다.
- WMIMon은 클라이언트 프로세스 ID, 작업에서 호출하는 WMI 네임스페이스, WMI 클래스 이름 및 요청을 만드는 데 사용되는 사용자 계정과 같은 정보를 표시합니다.
- WMIMon의 출력을 분석하여 WMI 호출이 빈번하고 잠재적으로 높은 CPU 사용량을 유발하는 프로세스를 식별합니다.
이러한 단계를 수행하면 WMIMon.exe 사용하여 시스템에서 WMI 활동을 모니터링하고 과도한 WMI 사용으로 인한 성능 또는 보안 문제를 식별할 수 있습니다.
예를 들어 다음과 같습니다.
참고 항목
명령 프롬프트에서 명령을 실행 WMIMon.exe > Data.txt
하여 WMIMon에서 캡처한 데이터를 텍스트 파일로 내보낼 수 있습니다. 데이터 캡처를 중지하려면 Ctrl C를 + 누릅니다.
특정 클라이언트 PID, 애플리케이션 또는 EXE 축소가 불가능한 까다로운 상황이 있을 수 있습니다. 이러한 경우 사용자 이름 또는 연결된 컴퓨터와 같은 일반적인 엔터티를 고려하는 것이 유용할 수 있습니다.
즉, 쿼리를 시작하는 사용자가 서비스 계정인지 또는 특정 애플리케이션과 연결되어 있는지 이해합니다.
기타 솔루션
용의자를 완료하면 서비스를 일시적으로 사용하지 않도록 설정하거나 연결된 애플리케이션을 제거하고 높은 CPU 사용 문제가 해결되었는지 확인하는 것이 좋습니다.
다음은 사용하지 않도록 설정하면 관찰의 유효성을 검사할 수 있는 몇 가지 시나리오입니다.
- 애플리케이션 및 서비스 모니터링
- SCCM(System Center Configuration Manager)(policyhost.exe 또는 Monitoringhost.exe)
- WMI 쿼리를 포함하는 스크립트 실행 Powershell.exe
- 타사 애플리케이션
데이터 수집
Microsoft 지원의 지원이 필요한 경우 사용자 환경 문제에 대해 TSS를 사용하여 정보 수집에 설명된 단계에 따라 정보를 수집하는 것이 좋습니다.
TSS.zip 다운로드하고 콘텐츠를 추출합니다.
관리자 권한 PowerShell 명령 프롬프트에서 다음 cmdlet을 실행하여 추적을 시작합니다. 컴퓨터에서 높은 CPU 문제가 발생하거나 문제를 재현할 때 추적을 계속 실행합니다.
.\TSS.ps1 -UEX_WMIBase -WIN_Kernel -ETWflags 1 -WPR CPU -Perfmon UEX_WMIPrvSE -PerfIntervalSec 1 -noBasicLog
참고 항목
추적을 2분 이상 계속 실행합니다. 이 기간 동안 문제가 재현되었는지 확인합니다.
TSS 도구 집합에 따라 PowerShell 명령 프롬프트의 지침에 따라 추적을 중지합니다.
스크립트는 모든 추적 및 진단 정보의 결과를 포함하는 zip 파일을 만듭니다. 지원 사례를 만든 후 이 파일을 분석을 위해 보안 작업 영역에 업로드할 수 있습니다.