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.