У моего клиента проблемы с WMI, как указано в журнале событий:
Log Name: Application
Source: Microsoft-Windows-WMI
Date: 3/04/2019 6:43:12
Event ID: 5612
Task Category: None
Level: Warning
Keywords:
User: NETWORK SERVICE
Computer: Computer_Name
Description:
Windows Management Instrumentation has stopped WMIPRVSE.EXE because a quota reached a warning value.
Quota: PrivatePageCount Value: 1089261568 Maximum value: 1073741824
WMIPRVSE PID: 9424 Providers hosted in this process:
%systemroot%\system32\wbem\ntevt.dll,
%systemroot%\system32\wbem\cimwin32.dll,
%SystemRoot%\system32\tscfgwmi.dll,
%systemroot%\system32\wbem\WMIPICMP.dll,
%systemroot%\system32\wbem\ntevt.dll
Event Xml: ...
У меня также есть дамп-файл WMIPrvSE.exe, созданный непосредственно перед сбоем процесса.
Я открываю этот дамп памяти в Visual Studio, чтобы увидеть, где именно используется эта память. К сожалению, я не знаю, какую нить, какую переменную искать. (Идея состоит в том, чтобы найти результаты запроса, которые приводят к тому, что упомянутый размер страницы слишком велик, и оттуда попытаться выяснить, какой запрос вызывает эту проблему (один запрос, а какой - разные запросы, раз один и тот же запрос, заполняя память, ...))
Кто-нибудь может дать какое-нибудь руководство в этом?
Для вашей информации, окно threads
выглядит так:
Thread ID Category Name Location
24164 Main Thread Main Thread win32u.dll!NtUserGetMessage
29316 Worker Thread ncobjapi.dll!CNamedPipeClient::ProviderReadyThreadProc() ncobjapi.dll!CNamedPipeClient::ProviderReadyThreadProc
6524 Worker Thread combase.dll!CRpcThreadCache::RpcWorkerThreadEntry combase.dll!WaitCoalesced
31384 Worker Thread WmiPrvSE.exe!WmiThread<unsigned long>::ThreadProc() WmiPrvSE.exe!WmiThread<unsigned long>::ThreadWait
31468 Worker Thread ntdll.dll!TppWorkerThread ntdll.dll!NtWaitForWorkViaWorkerFactory
8512 Worker Thread ntdll.dll!TppWorkerThread ntdll.dll!NtWaitForWorkViaWorkerFactory
4788 Worker Thread cimwin32.dll!CTimerQueue::dwThreadProc cimwin32.dll!CTimerQueue::dwThreadProc
29840 Worker Thread ntdll.dll!TppWorkerThread ntdll.dll!NtWaitForWorkViaWorkerFactory
25916 Worker Thread ntdll.dll!TppWorkerThread ntdll.dll!NtWaitForWorkViaWorkerFactory
2240 Worker Thread ntdll.dll!TppWorkerThread fastprox.dll!CWbemInstance::CWbemInstance
24524 Worker Thread ntdll.dll!TppWorkerThread ntdll.dll!NtWaitForWorkViaWorkerFactory
31748 Worker Thread ntdll.dll!TppWorkerThread ntdll.dll!NtWaitForWorkViaWorkerFactory
15260 Worker Thread ntdll.dll!TppWorkerThread ntdll.dll!NtWaitForWorkViaWorkerFactory
23800 Worker Thread ntdll.dll!TppWorkerThread fastprox.dll!CWbemObject::Lock
23416 Worker Thread ntdll.dll!TppWorkerThread ntdll.dll!NtWaitForWorkViaWorkerFactory
4636 Worker Thread ntdll.dll!TppWorkerThread ntdll.dll!NtWaitForWorkViaWorkerFactory
9308 Worker Thread ntdll.dll!TppWorkerThread ntdll.dll!NtWaitForWorkViaWorkerFactory
6968 Worker Thread ntdll.dll!TppWorkerThread ntdll.dll!NtWaitForWorkViaWorkerFactory
1012 Worker Thread ntdll.dll!TppWorkerThread ntdll.dll!NtWaitForWorkViaWorkerFactory
27328 Worker Thread combase.dll!CRpcThreadCache::RpcWorkerThreadEntry combase.dll!WaitCoalesced
25508 Worker Thread WmiPrvSE.exe!WmiThread<unsigned long>::ThreadProc() WmiPrvSE.exe!WmiThread<unsigned long>::ThreadWait
Изменить после более глубокого понимания
Если вы случайно узнаете, где я могу найти закрытые символы процесса WMIPrvSE, это позволит мне проверить локальные переменные, что также может быть интересно.
Следующее редактирование после запуска сценария heap_stat.py
Тем временем я запускаю сценарий heap_stat.py
для дампов и вижу довольно много объектов, которые выглядят как WMI
(provthrd!WmiTreeNode
, fastprox!CWbemObject
, ...).
К сожалению, поиск этих объектов, похоже, не работает (в сеансе Windbg
я выбрал Windbg
, потому что окно просмотра Visual Studio запрашивает правильное расположение стека / стека вызовов, и, насколько я знаю, это не относится к windbg
):
0:000> dtx provthrd!WmiTreeNode 0x000001b1d1ab2400
Error: Unable to find type 'WmiTreeNode *' for cast.
0:000> dtx WmiTreeNode 0x000001b1d1ab2400
Error: Unable to find type 'WmiTreeNode *' for cast.
0:000> dtx fastprox!CWbemObject 0x000001b1ae00c3c0
Error: Unable to find type 'CWbemObject *' for cast.
0:000> dtx CWbemObject 0x000001b1ae00c3c0
Error: Unable to find type 'CWbemObject *' for cast.
Боюсь, это не работает из-за отсутствия личных символов, кто-нибудь может подтвердить или помочь мне?