Cronologia dell'esecuzione del processo e dell'utilizzo della CPU Linux


38

C'è un modo per vedere quale processo (i) ha causato la maggior parte dell'utilizzo della CPU?

Ho AMAZON EC2 Linux il cui utilizzo della CPU raggiunge il 100 percento e mi fa riavviare il sistema. Non riesco nemmeno ad accedere tramite SSH (usando lo stucco).

Esiste un modo per vedere quali sono le cause di un utilizzo della CPU così elevato e quale processo ha causato questo?

Conosco sare topcomando ma non sono riuscito a trovare la cronologia di esecuzione del processo da nessuna parte. Ecco l'immagine dallo strumento di monitoraggio Amazon EC2, ma vorrei sapere quale processo ha causato questo:

inserisci qui la descrizione dell'immagine

Ho anche provato, ps -eo pcpu,args | sort -k 1 -r | head -100ma senza fortuna a trovare un utilizzo della CPU così elevato.

Risposte:


34

Ci sono un paio di possibili modi per farlo. Si noti che è del tutto possibile i suoi numerosi processi in uno scenario in fuga che causa questo, non solo uno.

Il primo modo è configurare pidstat per l'esecuzione in background e la produzione di dati.

pidstat -u 600 >/var/log/pidstats.log & disown $!

Questo ti darà una visione abbastanza dettagliata del funzionamento del sistema a intervalli di dieci minuti. Suggerirei che questo sia il tuo primo punto di riferimento poiché produce i dati più preziosi / affidabili con cui lavorare.

C'è un problema con questo, principalmente se la scatola va in un loop cpu in fuga e produce un carico enorme - il tuo non è garantito che il tuo processo effettivo verrà eseguito in modo tempestivo durante il caricamento (se non del tutto) in modo da poter effettivamente perdere l'output !

Il secondo modo per cercarlo è abilitare la contabilità di processo. Forse più di un'opzione a lungo termine.

accton on

Ciò consentirà la contabilità di processo (se non è già stata aggiunta). Se non era in esecuzione prima, ciò richiederà tempo per essere eseguito.

Essendo stato eseguito, per esempio 24 ore, è quindi possibile eseguire un tale comando (che produrrà un output in questo modo)

# sa --percentages --separate-times
     108  100.00%       7.84re  100.00%       0.00u  100.00%       0.00s  100.00%         0avio     19803k
       2    1.85%       0.00re    0.05%       0.00u   75.00%       0.00s    0.00%         0avio     29328k   troff
       2    1.85%       0.37re    4.73%       0.00u   25.00%       0.00s   44.44%         0avio     29632k   man
       7    6.48%       0.00re    0.01%       0.00u    0.00%       0.00s   44.44%         0avio     28400k   ps
       4    3.70%       0.00re    0.02%       0.00u    0.00%       0.00s   11.11%         0avio      9753k   ***other*
      26   24.07%       0.08re    1.01%       0.00u    0.00%       0.00s    0.00%         0avio      1130k   sa
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28544k   ksmtuned*
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28096k   awk
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     29623k   man*
       7    6.48%       7.00re   89.26%       0.00u    0.00%       0.00s    

Le colonne sono ordinate come tali:

  1. Numero di chiamate
  2. Percentuale di chiamate
  3. Quantità di tempo reale speso per tutti i processi di questo tipo.
  4. Percentuale.
  5. Tempo CPU utente
  6. Percentuale
  7. Tempo di CPU del sistema.
  8. Chiamate IO medie.
  9. Percentuale
  10. Nome del comando

Quello che stai cercando sono i tipi di processo che generano il maggior tempo CPU utente / sistema.

Ciò suddivide i dati come la quantità totale di tempo della CPU (la riga superiore) e quindi come è stato suddiviso il tempo della CPU. La contabilità dei processi viene eseguita correttamente solo quando è attiva quando vengono generati i processi, quindi è probabilmente meglio riavviare il sistema dopo averlo abilitato per garantire che tutti i servizi vengano contabilizzati.

Questo, in realtà, non ti dà un'idea precisa di quale processo potrebbe essere la causa di questo problema, ma potrebbe darti una buona sensazione. Come potrebbe essere un'istantanea di 24 ore, c'è una possibilità di risultati distorti, quindi tienilo a mente. Dovrebbe anche essere sempre loggato poiché è una funzionalità del kernel e, diversamente da pidstat, produrrà sempre output anche durante un carico pesante.

L'ultima opzione disponibile utilizza anche la contabilità dei processi in modo da poterla attivare come sopra, ma quindi utilizzare il programma "lastcomm" per produrre alcune statistiche dei processi eseguiti nel periodo del problema insieme alle statistiche della cpu per ogni processo.

lastcomm | grep "May  8 22:[01234]"
kworker/1:0       F    root     __         0.00 secs Tue May  8 22:20
sleep                  root     __         0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                   X root     pts/0      0.00 secs Tue May  8 22:49
ksmtuned          F    root     __         0.00 secs Tue May  8 22:49
awk                    root     __         0.00 secs Tue May  8 22:49

Questo potrebbe darti anche alcuni suggerimenti su cosa potrebbe causare il problema.


Risposta molto bella e dettagliata, buon lavoro!
Bart De Vos,

2
Sì, non l'hai usato prima di provarlo! Raccoglie le stesse informazioni di pidstat ma le presenta in un'interfaccia molto più adatta all'esplorazione interattiva. Ha anche un comando atopsar se si preferiscono i report in stile sar.
sciurus

18

Atop è un demone particolarmente utile per esaminare i drill-down a livello di processo e per impostazione predefinita archivia questi dati per 28 giorni. Oltre a presentare una fantastica interfaccia di monitoraggio in tempo reale, puoi specificare i file di registro da aprire e sfogliarli.

L' articolo fornisce alcune idee sulle funzionalità e puoi trovarne altre nella manpage .

È davvero un software meraviglioso.


3

Programmi come psmon e Monit forse utile per voi. Questi possono monitorare i processi in esecuzione sul tuo sistema e se viene superata qualsiasi soglia (utilizzo della CPU, utilizzo della memoria ...), puoi impostarli per inviarti un rapporto e-mail su ciò che sta accadendo.

È anche possibile riavviare automaticamente i processi di comportamento errato.


0

Una soluzione è scrivere uno script che viene eseguito tramite cron di un minuto o in un ciclo di sospensione e ti manda un lavoro di posta elettronica / scp / dump a un volume ebs ... con l'output pertinente (dmesg, pstree -pa e ps aux, probabilmente vmstat) nell'istante in cui trova la media del carico oltre un certo limite ...

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.