Как измерить квоту WMI PrivatePageCount - PullRequest
0 голосов
/ 04 апреля 2019

У моего клиента проблемы с 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.

Боюсь, это не работает из-за отсутствия личных символов, кто-нибудь может подтвердить или помочь мне?

...