Quali sono i metodi disponibili per ottenere l'utilizzo della CPU nella riga di comando di Linux? [chiuso]


12

Sappiamo che topè un comando per ottenere l'utilizzo della CPU in Linux e altri modi includono cat /proc/statquale è usato da top.

Quali sono altri metodi per ottenere l'utilizzo della CPU nella riga di comando di Linux?

Scenario di caso d'uso: l'output di questo comando verrà utilizzato da uno script per registrare continuamente l'utilizzo della CPU. tope /proc/statfornire un utilizzo dettagliato che è difficile da registrare. C'è un modo più semplice per ottenere le informazioni sulla CPU?


3
cosa c'è di sbagliato con quelli che citi?
Pataluc,

@pataluc Fornisce informazioni più dettagliate. Ho bisogno di un utilizzo complessivo della CPU dire CPU utilizzata: 91% Mem utilizzata: 78% Mem gratuita: 22% qualcosa del genere ..
fasil

vedi la risposta di Nathan ... puoi ottenere sedil risultato se vuoi solo il valore.
Pataluc,

Votare per chiudere come "non costruttivo". Da superuser.com/help/dont-ask : " Per evitare che la tua domanda venga contrassegnata e possibilmente rimossa, evita di porre domande soggettive in cui ... la tua risposta viene fornita insieme alla domanda e ti aspetti più risposte: 'Io uso ______ per ______ , cosa usi?' "
bwDraco,

3
@DragonLord in realtà, ci sono modi abbastanza limitati per farlo e le due risposte qui sono in effetti utili. Il mio indica un malinteso molto comune tope l'altro dà un comando molto utile. Non è un I che uso X, e tu? domanda, ma una come faccio X domanda. Votazione per riaprire.
Terdon,

Risposte:


14

Come altri hanno già detto, il modo migliore è probabilmente top. Ha bisogno di un po 'di modifiche e un po' di analisi, ma puoi ottenerlo per darti l'attuale utilizzo della CPU in percentuale.

topdivide l'utilizzo della CPU tra utente, processi di sistema e niceprocessi, vogliamo la somma dei tre. Quindi, possiamo eseguire topin bmodalità atch che ci consente di analizzarne l'output. Tuttavia, come spiegato qui , la prima iterazione di top -brestituisce le percentuali dall'avvio, quindi abbiamo bisogno di almeno due iterazioni ( -n 2) per ottenere la percentuale corrente. Per velocizzare le cose, puoi impostare l' delay tra le iterazioni su 0.01. Infine, grepla riga che contiene le percentuali di CPU e quindi utilizza gawkper sommare l'utente, il sistema e i 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 anche ottenere queste informazioni ps -o pcpu axaggiungendo la percentuale di utilizzo di ogni processo in esecuzione. Sfortunatamente, come spiegato qui , ps"restituisce la percentuale di tempo trascorso in esecuzione durante l'intero ciclo di vita di un processo" che non è ciò di cui hai bisogno.


MODIFICARE

Sulla base del tuo commento, la tua versione di topè diversa dalla mia e dovresti invece usare questa:

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 locale su C:

LC_ALL=C top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'

Ho cancellato la mia risposta perché ciò che hai detto è corretto. Questo sembra essere un metodo valido.
Nathan C,

@NathanC Pensavo che anche la tua risposta fosse corretta, era quello a cui avrei risposto. Poi l'ho provato e sono rimasto sorpreso :).
terdon,

@terdon Grazie per la risposta dettagliata ... Non sono riuscito a ottenere l'output per il comando sopra. Sono necessarie modifiche sintattiche?
Fasil,

@fasil no, dovrebbe funzionare. Qual è il problema? Qualche messaggio di errore?
terdon,

@terdon Non ottengo alcun output per il comando completo .. con #top -bn 2 -d 0.01 Ottengo il risultato completo ma aggiungendo grep '^% Cpu' non vedo alcun output solo i prompt restituiscono no errore ...
fasil,

9

sarè il modo definitivo per farlo. Quindi, ad esempio, sar -uprodurrà qualcosa del genere:

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 il sysstatpacchetto, e penso che sia lo stesso su Debian / Ubuntu.

Puoi anche usare sar per raccogliere statistiche ad hoc :

sar -o /tmp/sar.out 60 600

Raccoglierà le statistiche ogni 60 secondi 600 volte, quindi 600 minuti.


1
Probabilmente dovresti esprimerlo diversamente. La linea che hai pubblicato misurerà ogni 60 secondi, 600 volte. Il modo in cui ho letto il tuo post è stato che il 600 è una durata, quindi se ne inserissi 30 600, occorrerebbero ogni 30 secondi per 600 minuti, tuttavia ne impiegherei uno ogni 30 secondi 600 volte.
James McDonnell,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.