Come altri hanno già detto, il modo migliore è probabilmente top
. Ha bisogno di un po' di ritocco e di un po' di analisi, ma puoi ottenere che ti dia l'attuale utilizzo della CPU in percentuale.
top
divide l'utilizzo della CPU tra utente, processi di sistema e nice
processi, vogliamo la somma dei tre. Quindi, possiamo eseguire top
in b
modalità atch che ci consente di analizzare il suo output. Tuttavia, come spiegato qui, la prima iterazione di top -b
restituisce le percentuali dall'avvio, abbiamo quindi bisogno di almeno due iterazioni (-n 2
) per ottenere la percentuale corrente. Per velocizzare le cose, puoi impostare il d
elay tra le iterazioni a 0.01
. Infine, grep
la riga contenente le percentuali della CPU e quindi utilizzare gawk
per sommare utente, sistema e processi piacevoli:
top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
----- ------ ----------- --------- ----------------------
| | | | |------> add the values
| | | |--> keep only the 2nd iteration
| | |----------------> keep only the CPU use lines
| |----------------------------> set the delay between runs
|-----------------------------------> run twice in batch mode
Ho pensato che potresti ottenere queste informazioni anche tramite ps -o pcpu ax
aggiungendo la percentuale di utilizzo di ogni processo in esecuzione. Sfortunatamente, come spiegato qui, ps
"restituisce la percentuale di tempo trascorso in esecuzione durante l'intera durata di un processo" che non è ciò di cui hai bisogno.
MODIFICA
In base al tuo commento, la tua versione di top
è diverso dal mio e dovresti usare questo invece:
top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'
E, per evitare problemi con la localizzazione, imposta la localizzazione su C:
LC_ALL=C top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'
sar
è il modo definitivo per farlo. Quindi, ad esempio, sar -u
produrrà qualcosa di simile a questo:
08:30:01 AM CPU %user %nice %system %iowait %idle
08:40:01 AM all 6.94 0.00 1.77 4.92 86.36
08:50:01 AM all 5.73 0.00 2.31 12.72 79.24
09:00:01 AM all 5.95 0.00 2.58 18.36 73.11
09:10:01 AM all 6.88 0.00 2.22 17.44 73.45
09:20:01 AM all 8.61 0.00 2.68 27.93 60.78
Non dici quale Linux usi ma per CentOS/RedHat devi installare sysstat
pacchetto, e penso che sia lo stesso su Debian/Ubuntu.
Puoi anche utilizzare sar per raccogliere statistiche ad hoc :
sar -o /tmp/sar.out 60 600
Raccoglierà statistiche ogni 60 secondi 600 volte, quindi 600 minuti.