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:
- Numero di chiamate
- Percentuale di chiamate
- Quantità di tempo reale speso per tutti i processi di questo tipo.
- Percentuale.
- Tempo CPU utente
- Percentuale
- Tempo di CPU del sistema.
- Chiamate IO medie.
- Percentuale
- 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.