Ottenere l'utilizzo della CPU in tempo reale

9

Quando eseguo il seguente comando per ottenere l'utilizzo della cpu, ho un buon uso della cpu dell'utente.

top -b -n1 | grep "Cpu(s)" | awk '{print  + }' 

Output:

14.5

Qui sto riscontrando un problema: l'output dipende dal comando top, quindi non cambia istantaneamente come comando superiore. Quindi non sto ottenendo la CPU corretta all'istante. Fornisce lo stesso output e non cambia.

Voglio ottenere l'utilizzo della CPU in tempo reale in uscita. Per favore aiutami a migliorare il mio comando.

    
posta Ketankumar Patel 28.03.2013 - 08:40

4 risposte

17

Se puoi permetterti un ritardo di un secondo, questo stamperà l'utilizzo della CPU come una semplice percentuale:

echo $[100-$(vmstat 1 2|tail -1|awk '{print }')]

(Senza il ritardo di un secondo, vmstat può stampare solo media valori dal momento dell'avvio.)

    
risposta data Paul 21.05.2013 - 00:15
7

Questo è un problema noto con top . Come spiegato qui , la prima iterazione di top -b restituisce le percentuali dal boot, quindi abbiamo bisogno di almeno due iterazioni ( -n 2 ) per ottenere la percentuale corrente. Per velocizzare le cose, puoi impostare d elay tra le iterazioni a 0.01 . top divide l'utilizzo della CPU tra utente, processi di sistema e processi nice , vogliamo la somma dei tre. Infine, tu grep la riga contenente le percentuali della CPU e quindi usa gawk per sommare i processi utente, di sistema e di qualità:

    top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print ++}'
        -----  ------   -----------    ---------   ----------------------
          |      |           |             |             |------> add the values
          |      |           |             |--> keep only the 2nd iteration
          |      |           |----------------> keep only the CPU use lines
          |      |----------------------------> set the delay between runs
          |-----------------------------------> run twice in batch mode
    
risposta data terdon 04.01.2014 - 14:18
6

Ho provato diversi modi, ma questo mi sembra il più preciso:

cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{print (-+-)*100/(-+-+-)}'

Ottenuto da qui

    
risposta data lepe 14.07.2015 - 10:11
0

Utilizza -n2 . Questo produrrà due righe. La prima volta che top stampa la riga non si qualifica per lo stato in quel momento. Quindi regola lo script per ignorare la prima riga.

    
risposta data ilp 27.06.2013 - 15:55

Leggi altre domande sui tag