2009-08-03 13 views
112

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)?

+0

Questo appare come un duplicato di http://stackoverflow.com/questions/806830/capture-cpu-and-memory-usage-dynamically –

+8

pone sul SuperUser. – Richard

+0

o ServerFault. – SunSparc

risposta

155
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.

+0

Questo non è molto accurato. Include la memoria utilizzata dalle librerie condivise. –

+5

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

+0

come rimuovere l'intestazione nell'output di questo comando? – Chaitanya

4

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.

1

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.

45

Una variante di caf's answer: top -p <pid>

Questa auto-aggiorna l'utilizzo della CPU quindi è bene per il monitoraggio.

+3

'htop -p ' funziona anche .. – sinan

4
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 
14

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 
+0

grazie per indicare 'pidstat' è un ottimo comando e utile anche per lo scripting! – fduff

0

(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)

+0

il tuo comando non è corretto correggilo –

+2

In ubuntu 'top -c -p PID' questo comando funziona –

26

È 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.

+0

come includere anche de pid? Ho provato% pid $ PID $, PID senza fortuna –

+0

@ArnoldRoa 'pid' dovrebbe funzionare. 'ps -C chrome -o pid,% cpu,% mem, cmd' –

1
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.

1
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 ...

3

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 
5

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.

0

questo elenco la CPU superiore e consumo di memoria processo

 ps axo %cpu,%mem,command | sort -nr | head 
0

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 
Problemi correlati