Řešení 1:
Existuje několik možných způsobů, jak to udělat. Všimněte si, že je zcela možné, že to způsobí mnoho procesů ve scénáři s útěkem, nejen jeden.
První způsob je nastavit pidstat tak, aby běžel na pozadí a produkoval data.
pidstat -u 600 >/var/log/pidstats.log & disown $!
Získáte tak poměrně detailní přehled o chodu systému v desetiminutových intervalech. Navrhoval bych, aby to byl váš první port, protože vytváří nejcennější/nejspolehlivější data, se kterými lze pracovat.
S tím je problém, především pokud se box dostane do nekontrolované smyčky procesoru a produkuje obrovské zatížení - nemáte zaručeno, že váš skutečný proces se během načítání provede včas (pokud vůbec), takže byste mohli skutečně zmeškat výstup !
Druhý způsob, jak to hledat, je povolit procesní účetnictví. Možná spíše dlouhodobější varianta.
accton on
To umožní účtování procesů (pokud již není přidáno). Pokud předtím neběžel, bude to vyžadovat čas ke spuštění.
Po spuštění, řekněme 24 hodin - můžete spustit takový příkaz (který vytvoří výstup podobný tomuto)
# 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
Sloupce jsou seřazeny takto:
- Počet hovorů
- Procento hovorů
- Množství reálného času stráveného všemi procesy tohoto typu.
- Procento.
- Čas procesoru uživatele
- Procento
- Čas procesoru systému.
- Průměrné IO volání.
- Procento
- Název příkazu
To, co budete hledat, jsou typy procesů, které generují nejvíce času CPU uživatele/systému.
To rozdělí data jako celkové množství času CPU (horní řádek) a potom, jak byl tento čas CPU rozdělen. Účtování procesů se správně účtuje pouze tehdy, když je zapnuto, když se procesy spustí, takže je pravděpodobně nejlepší restartovat systém poté, co jej povolíte, aby bylo zajištěno, že budou účtovány všechny služby.
To vám v žádném případě nedává konkrétní představu, jaký proces může být příčinou tohoto problému, ale může vám poskytnout dobrý pocit. Vzhledem k tomu, že se může jednat o 24hodinový snímek, existuje možnost zkreslených výsledků, takže na to pamatujte. Také by se měl vždy logovat, protože je to vlastnost jádra a na rozdíl od pidstat bude vždy vytvářet výstup i při velkém zatížení.
Poslední dostupná možnost také využívá účtování procesů, takže je můžete zapnout, jak je uvedeno výše, ale poté použijte program "lastcomm" k vytvoření některých statistik procesů spuštěných v době, kdy došlo k problému, spolu se statistikami procesoru pro každý proces.
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
To vám také může napovědět, co může být příčinou problému.
Řešení 2:
Atop je obzvláště praktický démon pro prohlížení podrobností na úrovni procesu a ve výchozím nastavení tato data archivuje po dobu 28 dní. Kromě prezentace úžasného rozhraní pro monitorování v reálném čase můžete tyto soubory protokolu otevřít a procházet je.
Článek poskytuje určitou představu o možnostech a více najdete na manuálové stránce.
Je to opravdu úžasný kus softwaru.
Řešení 3:
Mohou vám pomoci programy jako psmon a monit. Ty mohou monitorovat procesy běžící na vašem systému a pokud dojde k překročení jakékoli prahové hodnoty (vytížení CPU, využití paměti...), můžete nastavit, aby vám posílali e-mailovou zprávu o tom, co se děje.
Je také možné automaticky restartovat nesprávně se chovající procesy.