Я работаю администратором сервера 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
Я оставлю создание оповещения на ваше усмотрение.