Come convertire il tempo CPU di un elenco di attività in% utilizzo CPU?
-
03-07-2019 - |
Domanda
Sto cercando di usare tasklist
per scoprire quale processo sta consumando più dell'X percento della mia CPU (per poi ucciderlo con taskkill
.)
Come faccio a sapere quale percentuale rappresenta un formato orario?
La documentazione dice:
TASKLIST options
/FI filter
E un filtro può essere:
CPUTIME eq, ne, gt, lt, ge, le CPU time in the format: hh:mm:ss.
hh - number of hours,
mm - minutes, ss - seconds
Se provo
tasklist /FI "CPUTIME gt 00:00:10"
funziona.
Ma se io
tasklist /FI "CPUTIME gt 90"
non lo è.
Come posso sapere che il formato dell'ora rappresenta il 90%? O l'80%? Qual è la relazione tra il tempo di utilizzo della CPU e la percentuale di utilizzo della CPU?
Soluzione
Il CPUTime di Tasklist è una misura di quanto tempo (cicli) della CPU è stato utilizzato dall'inizio del processo, quindi per convertirlo in percentuale, sarebbe
(TotalProcessRuntime / CpuTime) / 100
Almeno, questo è quello che raccolgo :)
Altri suggerimenti
Non sembra che ci sia un modo semplice per farlo con tasklist, quindi suggerirei di farlo in VBscript o in un altro linguaggio di scripting, o usando un approccio diverso. Se sei vincolato a file batch, puoi utilizzare il comando WMIC per ottenere l'elenco dei processi in esecuzione con il rispettivo CPUTime:
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
Si noti che questo nei miei test ha mostrato che wmipsrv.exe ha una CPU al 100%, perché ha avuto un picco durante l'esecuzione della query WMI. Dovresti tenerne conto nel tuo script o finirai per provare a uccidere costantemente il servizio WMI;)
Riferimento:
http: // waynes-world-it .blogspot.com / 2008/09 / util-general-command-line-operations.html
http://technet.microsoft.com/en-us/library/bb742610.aspx