WMI Provider Host загрузил процессор виртуальной машины на 100 %: как найти, кто его дёргает, и почему перезапуск службы лишь первая мера

Что было. Виртуальная машина с Windows стала неотзывчивой, в диспетчере задач процесс «WMI Provider Host» (WmiPrvSE.exe) держит все ядра. Автор перезапустил службу Windows Management Instrumentation (net stop Winmgmt && net start Winmgmt), нагрузка ушла. Подтверждено.

Что это значит. Сам WmiPrvSE ничего не делает по своей инициативе: он отвечает на запросы. Если он грузит процессор, кто-то шлёт ему запросы непрерывно или запрашивает что-то тяжёлое (например, перечисление всех файлов через CIM_DataFile). Перезапуск службы обрывает текущие запросы, но клиент никуда не делся, и через часы или дни картина повторится.

Как найти клиента.

  1. Журнал событий: «Журналы приложений и служб → Microsoft → Windows → WMI-Activity → Operational». В событиях 5858 (ошибки запросов) и, при включённой трассировке, 5857/5861 указан ClientProcessId и текст запроса. Сопоставить PID с процессом: tasklist /svc | findstr <PID> или в диспетчере задач.
  2. Если процесс это svchost, узнать, какая служба внутри: tasklist /svc /fi "PID eq <PID>".
  3. Типичные клиенты: агенты мониторинга и инвентаризации, антивирусные консоли, средства управления от вендора оборудования, PowerShell-скрипты по расписанию, панели хостинга, а также сама система при сборе телеметрии сразу после обновления.

Что делать по результату.

  • Свой скрипт или агент: уменьшить частоту опроса, заменить тяжёлые классы WMI (Win32_Product, полный обход CIM_DataFile) на точечные запросы с WHERE.
  • Агент мониторинга: обновить или настроить интервалы; часто проблему чинит свежая версия агента.
  • Повторяется без явного клиента: проверить целостность репозитория WMI (winmgmt /verifyrepository; при ошибке winmgmt /salvagerepository) и поставить обновления, в накопительных обновлениях периодически исправляют утечки в провайдерах.
  • Постоянный бесконтрольный рост памяти у WmiPrvSE вместе с CPU: смотреть событие 5612 (превышена квота провайдера), это уже отдельная тема о квотах WMI.

Что не делать. Не отключать службу WMI и не блокировать WmiPrvSE: от WMI зависят планировщик, обновления, управление сервером, диагностика. Не завершать процесс вручную в цикле: это то же самое, что перезапуск службы, только грубее.

На виртуальной машине. Один vCPU и агент, опрашивающий WMI каждые 10 секунд, дают ровно такую картину. Проверьте, что на машине нет двух агентов мониторинга одновременно (свой и от площадки).

Диагностика высокой нагрузки WMI описана в документации Microsoft.