2012-01-03 12 views

risposta

111

per filtrare l'output di top dal nome del processo, è possibile utilizzare pgrep per ottenere un elenco di PID per nome processo poi passare all'opzione -p di top. Per esempio:

top -p $(pgrep -d',' http) 

Nota: l'opzione -d',' delimita i PID con virgole, che è ciò che è previsto dal top -p. Nota 2: top restituirà un messaggio di errore se non ci sono processi in esecuzione che corrispondono al nome specificato in pgrep.

Per scrivere i risultati di top in un file, utilizzare l'opzione -n 1 (solo una iterazione) e reindirizzare l'output nel file di registro.

top -p $(pgrep -d',' http) -n 1 >> your_log_file 

Per fare questo ogni secondo, forse un ciclo while con un sleep farebbe?

while :; do top -p $(pgrep -d',' http) -n 1 >> your_log_file; sleep 1; done 

Per timestamp ogni voce, è possibile aggiungere l'output di date. Per esempio.

while :; do top -p $(pgrep -d',' http) -n 1 >> log.txt; date >> log.txt; sleep 1; done 
+0

Grazie Shawn, come registrare data e ora per ogni 1 secondo., In modo che possa aiutarmi a isolare a che ora e quanta CPU è stata utilizzata da un processo specifico. – BalaB

+0

@bala vedi gli aggiornamenti nella risposta. –

+0

Elegante e molto utile. Grazie! –

5

Un'altra opzione è:

top -b -d 1 -p $(pgrep -d',' java) -n 120 > log.txt 
  • L'opzione -d permette di impostare la frequenza utilizzata dal top per aggiornare i dati .
  • L'opzione -b significa che l'interfaccia tradizionale di top è non utilizzata. Invece, invia tutto allo standard output e quindi è possibile utilizzare una pipe (|) o un reindirizzamento (>).
  • L'opzione -n ​​informa sul numero di iterazioni che la parte superiore deve eseguire.

Dopo di che è possibile digitare:

cat log.txt | grep USER_OF_PROCESS 

si vedrà il tempo di esecuzione del processo e anche% di CPU, memoria e tutto il resto.

2
#You can run following script as ./cpurecorder.sh pid filename 
#It will generate output file with memory usage and cpu utilisation. 
#You can log other variable by searching man for ps. 

`enter code here`filepath=/home/rtcsadm    # modify as desired 
interval=20       # reports per minute 
timelimit=6000      # how long to run, in seconds 

mydate=`date "+%H:%M:%S"`   # the timestamp 
freq=$((60/$interval))    # for sleep function 

while [ "$SECONDS" -le "$timelimit" ] ; do 
    ps -p$1 -opid -opcpu -opmem -ocomm -c | grep $1 | sed "s/^/$mydate /" >> $filepath/$2.txt 
    sleep 3 
    mydate=`date "+%H:%M:%S"` 
done 
Problemi correlati