Назад | Перейти на главную страницу

perfmon - одиночный поток, использующий максимальный процессор - как определить?

Я работаю администратором сервера Windows. Часть моей работы заключается в обслуживании серверов и реагировании на предупреждения мониторинга, которые часто связаны с высокой загрузкой процессора. Иногда случается, что какое-то приложение или процесс застревает в бесконечном цикле или что-то в этом роде и использует 100% ЦП, но только одно ядро ​​/ поток, поэтому в 4-ядерной системе общее использование ЦП составляет 25%, и никакие предупреждения не запускаются, хотя я бы хотел чтобы знать, случается ли такая ситуация. Я думаю о способах обнаружения этого. Не работает просто установить порог до 25% использования ЦП, потому что сумма всех процессов, запущенных в системе, легко превышает 25%, но это не обнаруживает ситуации, когда за это отвечает только один процесс / поток. Я обнаружил, что в мониторе производительности я могу добавить \ Process (имя процесса) \% Processor Time, и если один процесс работает с максимальной нагрузкой и показывает 12% в диспетчере задач на ядре i7 (вы можете проверить это, перекодировав MP3) с LameXP, например) этот счетчик покажет вам 100, так что это работает и обнаружит такой процесс. Проблема в том, что он будет работать только для процессов, уже существующих на момент настройки счетчика. Даже если вы используете Все экземпляры и запустите его, он не будет отображать недавно запущенные процессы, что является проблемой. Есть ли какой-нибудь другой счетчик производительности или утилита, которая показывала бы такую ​​ситуацию?

РЕДАКТИРОВАТЬ: пример

если я, например, кодирую какой-нибудь большой файл WAV, я могу установить привязку lxp_lame.exe, чтобы использовать не все ядра, а только одно, и тогда да - этот фрагмент PowerShell покажет 100 для этого одного ядра. Если я этого не сделаю, процесс будет переключаться между ядрами, и никогда не будет большого числа.

Используйте счетчики производительности процессора WMI. Исключить счетчики с _Total, потому что это средняя нагрузка.

Get-WMIObject -Class Win32_PerfFormattedData_Counters_ProcessorInformation |
  Where-Object {$_.Name -notmatch "total"} |
    Select-Object -Property Name,PercentIdleTime,PercentProcessorTime

Вы увидите что-то вроде этого:

Name PercentIdleTime PercentProcessorTime
---- --------------- --------------------
0,0              100                    0
0,1               95                    4
0,2              100                    0
0,3               89                   10

Я оставлю создание оповещения на ваше усмотрение.