Voglio ottenere l'utilizzo della CPU e della memoria di un singolo processo su Linux: conosco il PID. Spero che riesca a ottenerlo ogni secondo e scriverlo a un CSV usando il comando "guarda". Quale comando posso usare per ottenere queste informazioni dalla riga di comando di Linux?Come posso ottenere l'utilizzo della CPU e l'utilizzo della memoria di un singolo processo su Linux (Ubuntu)?
risposta
ps -p <pid> -o %cpu,%mem,cmd
(È possibile disattivare "cmd" ma potrebbe essere utile nel debug).
Si noti che questo fornisce un utilizzo medio della CPU del processo nel corso del tempo in cui è stato eseguito.
Questo non è molto accurato. Include la memoria utilizzata dalle librerie condivise. –
L'ipotesi è che se ti interessa l'utilizzo della memoria di un singolo processo abbastanza da monitorarlo in questo modo, sta utilizzando una quantità significativa di memoria in modo che il paio di megabyte in più a causa di mapping condivisi non sia un problema. – caf
come rimuovere l'intestazione nell'output di questo comando? – Chaitanya
Si potrebbe utilizzare top -b
e grep il pid si desidera (con la parte superiore -b
bandiera viene eseguito in modalità batch), o anche utilizzare il flag -p
e specificare il pid senza l'utilizzo di grep.
Per ottenere l'utilizzo della memoria della sola applicazione (al contrario delle librerie condivise utilizzate, è necessario utilizzare l'interfaccia di Linux smaps). This answer explains it well.
Una variante di caf's answer: top -p <pid>
Questa auto-aggiorna l'utilizzo della CPU quindi è bene per il monitoraggio.
'htop -p
ps aux | awk '{print $4"\t"$11}' | sort | uniq -c | awk '{print $2" "$1" "$3}' | sort -nr
o per ogni processo
ps aux | awk '{print $4"\t"$11}' | sort | uniq -c | awk '{print $2" "$1" "$3}' | sort -nr |grep mysql
Usa pidstat (da sysstat - Refer Link).
ad es. per monitorare questi due ID di processo (12345 e 11223) ogni 5 secondi utilizzano
$ pidstat -h -r -u -v -p 12345,11223 5
grazie per indicare 'pidstat' è un ottimo comando e utile anche per lo scripting! – fduff
(Se siete in MacOS 10.10, provare l'opzione -c accumulativa top:
top -c a -pid PID
(questa opzione è non disponibile in altri Linux, provato con Scientific Linux EL6 e RHEL6)
il tuo comando non è corretto correggilo –
In ubuntu 'top -c -p PID' questo comando funziona –
È possibile ottenere i risultati per il nome del processo che utilizza
ps -C chrome -o %cpu,%mem,cmd
l'opzione -C
consente di utilizzare il nome del processo senza sapere che è pid.
come includere anche de pid? Ho provato% pid $ PID $, PID senza fortuna –
@ArnoldRoa 'pid' dovrebbe funzionare. 'ps -C chrome -o pid,% cpu,% mem, cmd' –
ps aux|awk '{print $2,$3,$4}'|grep PID
dove la prima colonna è il PID, l'utilizzo della seconda colonna della CPU, l'utilizzo della memoria della terza colonna.
ps axo pid,etime,%cpu,%mem,cmd | grep 'processname' | grep -v grep
PID - Process ID
etime - Processo corsa/live Durata
% cpu - utilizzo della CPU
% Mem - Utilizzo della memoria
cmd - Comando
Sostituisci nomeprocesso con qualsiasi processo tu voglia seguire, mysql ngin x php-fpm ecc ...
Come commentato in caf's answer sopra, ps e in alcuni casi pidstat fornirà la media di vita del pCPU. Per ottenere risultati più precisi, utilizzare la parte superiore. Se avete bisogno di eseguire alto una volta che si può lanciare:
top -b -n 1 -p <PID>
o per il processo solo i dati e l'intestazione:
top -b -n 1 -p <PID> | tail -3 | head -2
senza intestazioni:
top -b -n 1 -p <PID> | tail -2 | head -1
lanciare un programma e monitorare
Questo modulo è utile se si desidera eseguire il benchmark di un n eseguibile facilmente:
topp() (
$* &>/dev/null &
pid="$!"
trap ':' INT
echo 'CPU MEM'
while sleep 1; do ps --no-headers -o '%cpu,%mem' -p "$pid"; done
kill "$pid"
)
topp ./myprog arg1 arg2
Ora, quando si preme CTRL + C si esce dal programma e si arresta il monitoraggio. Esempio di output:
CPU MEM
20.0 1.3
35.0 1.3
40.0 1.3
testato su Ubuntu 16.04.
questo elenco la CPU superiore e consumo di memoria processo
ps axo %cpu,%mem,command | sort -nr | head
Tutte le risposte qui mostrano soltanto la percentuale di memoria per il PID.
Ecco un esempio di come ottenere l'utilizzo della memoria RSS in KB per tutti i processi di apache, sostituire "grep apache" con "grep PID" se si desidera solo per vedere un PID specifico:
watch -n5 "ps aux -y | grep apache | awk '{print \$2,\$6}'"
Questo stampe:
Every 5.0s: ps aux -y | grep apache | awk '{print $2,$6}'
Thu Jan 25 15:44:13 2018
12588 9328
12589 8700
12590 9392
12591 9340
12592 8700
12811 15200
15453 9340
15693 3800
15694 2352
15695 1352
15697 948
22896 9360
con CPU%:
watch -n5 "ps aux -y | grep apache | awk '{print \$2,\$3,\$6}'"
uscita:
Every 5.0s: ps aux -y | grep apache | awk '{print $2,$3,$6}'
Thu Jan 25 15:46:00 2018
12588 0.0 9328
12589 0.0 8700
12590 0.0 9392
12591 0.0 9340
12592 0.0 8700
12811 0.0 15200
15453 0.0 9340
15778 0.0 3800
15779 0.0 2352
15780 0.0 1348
15782 0.0 948
22896 0.0 9360
Questo appare come un duplicato di http://stackoverflow.com/questions/806830/capture-cpu-and-memory-usage-dynamically –
pone sul SuperUser. – Richard
o ServerFault. – SunSparc