Prošel jsem problémem, kdy jsem mohl jen hádat, jaký proces požíral procesor.
Moje využití procesoru bylo asi 80 % pro všechna jádra v psensor.
Zkoušel jsem htop
, top
a ps -A -o pcpu,pid,cmd --sort +pcpu
(poslední jsem dokonce zkoušel se sudem bez úspěchu).
Všechny tyto ukázaly pid viníka (kterého jsem si byl vědom) s použitím pouze asi 7 %…
Když na tom pid SIGKILL, vše se vrátí do normálu.
Pro testování jsem udělal nekonečnou smyčku na terminálu while true;do echo -n;done
ale to jsem jasně viděl na htop; takže můj odhad, co způsobilo potíže, nebylo podobné tomu…
Tak by mě zajímalo, jestli existují jiné způsoby, jak bych mohl najít viníka, aniž bych musel hádat?
Znovu přemýšlím a myslím, že bych rád věděl, jaké výpočty má psensor
a „aplet indikátoru zatížení systému“ používá, který dokázal ukázat tuto hodnotu, ale ostatní to nedokázali?
PS.:odkaz na dobu čekání,
odkaz na průměrnou zátěž
Přijatá odpověď:
Nejsem dostatečně obeznámen s detaily, abych mohl poskytnout přesné rady, ale myslím, že existují dva zdroje rozdílů mezi skutečným zatížením a zobrazeným využitím CPU:
-
Proces se může skládat z několika vláken a
top
nelze je shrnout. Počet vláken můžete vidět takto:ps -eo pid,nlwp,%cpu,user,args
V
top
můžete přepnout zpracování vláken pomocíH
. Využití CPU každého vlákna je obvykle poměrně nízké. -
Proces může způsobit velké množství I/O. Doba čekání na vstup/výstup je součástí celkového zatížení procesoru, ale nemusí být součástí hodnoty využití procesoru procesem. Zkontrolujte tedy
wait
hodnota vtop
. Neřekne vám, které procesy to způsobují, do jaké míry, ale pokud je hodnota nízká, nedokáže vysvětlit účinek.