Ho riscontrato un problema in cui potevo solo indovinare quale processo stava mangiando la CPU.
Il mio utilizzo della CPU era di circa l'80% per tutti i core su psensor.
Ho provato htop
, top
e ps -A -o pcpu,pid,cmd --sort +pcpu
(l'ultimo che ho anche provato con sudo inutilmente).
Tutti questi mostravano il pid colpevole (di cui ero a conoscenza) usando solo il 7% circa...
Quando SIGKILL su quel pid, tutto torna alla normalità.
Per testare, ho eseguito un ciclo infinito sul terminale while true;do echo -n;done
ma che potevo vedere chiaramente in alto; quindi la mia ipotesi che cosa stesse causando problemi non era simile a quello...
Quindi mi chiedo se ci sono altri modi in cui avrei potuto trovare il colpevole senza dover indovinare?
Ripensandoci, mi piacerebbe sapere quali calcoli psensor
e "applet indicatore di carico del sistema" utilizza che è stato in grado di mostrare quel valore ma gli altri non sono stati in grado di farlo?
PS.:collegamento sul tempo di attesa,
collegamento sul carico medio
Risposta accettata:
Non ho abbastanza familiarità con i dettagli per fornire suggerimenti precisi, ma suppongo che ci siano due fonti di differenze tra il carico reale causato e l'utilizzo della CPU mostrato:
-
Il processo può essere costituito da diversi thread e da
top
potrebbe non riassumerli. Puoi vedere il numero di thread da questo:ps -eo pid,nlwp,%cpu,user,args
In
top
puoi cambiare la gestione dei thread conH
. L'utilizzo della CPU di ogni thread è generalmente piuttosto basso. -
Il processo può causare molti I/O. Il tempo di attesa I/O fa parte del carico complessivo della CPU ma potrebbe non far parte del valore di utilizzo della CPU di un processo. Quindi controlla
wait
valore intop
. Non ti dice quali processi lo causano in quale misura, ma se il valore è basso non può spiegare l'effetto.