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
toppotrebbe non riassumerli. Puoi vedere il numero di thread da questo:ps -eo pid,nlwp,%cpu,user,argsIn
toppuoi 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
waitvalore intop. Non ti dice quali processi lo causano in quale misura, ma se il valore è basso non può spiegare l'effetto.