Как преобразовать процессорное время списка задач в процент использования процессора?
-
03-07-2019 - |
Вопрос
Я пытаюсь использовать tasklist
чтобы выяснить, какой процесс потребляет более X процентов моего процессора (чтобы позже уничтожить его с помощью taskkill
.)
Как я узнаю, какой процент представляет формат времени?
В документации говорится:
TASKLIST options
/FI filter
И один фильтр может быть:
CPUTIME eq, ne, gt, lt, ge, le CPU time in the format: hh:mm:ss.
hh - number of hours,
mm - minutes, ss - seconds
Если я попытаюсь
tasklist /FI "CPUTIME gt 00:00:10"
это работает.
Но если я
tasklist /FI "CPUTIME gt 90"
это не так.
Откуда я могу знать, что формат времени составляет 90%?Или 80%?Какова связь между временем использования процессора и процентом загрузки процессора?
Решение
CPUTime в списке задач - это показатель того, сколько процессорного времени (циклов) было использовано с момента запуска процесса, поэтому, чтобы преобразовать это в процент, будет
(TotalProcessRuntime / CpuTime) / 100
По крайней мере, так я понял :)
Другие советы
Не похоже, что есть простой способ сделать это с помощью tasklist, поэтому я бы предложил либо сделать это на VBScript или другом скриптовом языке, либо использовать другой подход.Если вы ограничены пакетными файлами, то вы могли бы использовать WMIC команда для получения списка запущенных процессов с указанием их соответствующего времени процессора:
C:\> wmic path Win32_PerfFormattedData_PerfProc_Process get Name,PercentProcessorTime
Name PercentProcessorTime
Idle 0
System 0
Smss 0
csrss 0
winlogon 0
services 0
lsass 0
[...]
wmiprvse 100
wmic 0
_Total 100
Обратите внимание, что это в моем тестировании показало wmipsrv.exe, что процессор работает на 100%, потому что он подскочил при выполнении запроса WMI.Вы должны учитывать это в своем скрипте, иначе в конечном итоге вы будете постоянно пытаться отключить службу WMI ;)
Ссылка:
http://waynes-world-it.blogspot.com/2008/09/useful-general-command-line-operations.html
http://technet.microsoft.com/en-us/library/bb742610.aspx