Portál AbcLinuxu, 8. května 2025 02:45
Zdravím,
celkem nedávno mi OOM killer připomněl takovou zajímavost, která mi už delší dobu vrtá hlavou. Vyskytlo se to tedy na Debianím 2.6.32.Y kernelu, ale mám pocit, že jsem to zažil i po přepisu OOM (2.6.36 myslím).
Ve zkratce jde o to, že pokaždé, když OOM killer něco zabije, tak systém "zamrzne" na pár minut - neodpovídá na pingy, ssh, nic. Zamrznutí se prodlouží s přidáním swapu, ale i bez něj to je schopno neodpovídat 5-10 minut. Ptám se tedy - co sakra tak dlouho kernel na stroji s 8GB ram dělá? Zrušit reference zabitého programu přece tak dlouho trvat nemůže, swap není, takže diskem to také být nemůže. Nejzáhadnější je to, že systém po celou dobu "svítí" LED diodou HDD. Přitom - ještě jednou - swap na disku není!
Našel jsem vícero lidí se stejným problémem, bez odpovědi.
Tento dotaz píši čistě ze zvědavosti - pokud někdo ví, proč to kernelu tak trvá, je vítán i se svou odpovědí.
Díky.
PS: Může to být tím, že OOM prostě není těch 5-10 minut vůbec zavolán a nakopne ho až, já nevím, soft lockup detekce?
Řešení dotazu:
mv log log.20110929
netrva dlhsie ako zlomok sekundy bez ohladu na velkost suboru (pokial je to v ramci jedneho fs a zatial som to videl vzdy v spolocnom adresari, takze ano) pretoze vobec nesaha na data suboru. A ak aj nahodou nie, tak system, ktory kvoli kopirovaniu suboru nie je schopny ani pingat ma niekde tazky problem a nie je to v crone.
# sysctl -a | grep -F vm. # sysctl -a | grep -F oomCela tato tema, je na viac ako len odpoved v diskusii. Ak je este nieco stale nejasne, tak v priebehu dalsich dni sa isto budem pozerat sem do diskusie :o) Staci sa spytat ...
Kolega nahoře asi moc nepochopil, o co mi šlo, nepotřebuji rady "co" a "jak" nastavit, aby nedošlo k OOM, jen mě zaujala samotná situace zamrznutí kernelovských vláken (icmp echo reply) situací v userspace.
Díky za analýzu, vím, co je to trashing, jak funguje (přibližně) stránkování paměti, co jsou to výpadky stránek, jak a proč k nim může dojít, ale měl jsem za to, že kód všech programů je vždy udržován v paměti, pokud jej není kam odložit (tzn. není zapnutý swap).
To opravdu může nastat situace, kdy kernel začne z nedostatku mazat z aktivní paměti "textové" segmenty (v případě ELF binárek) jednotlivých (v ten moment asi spících) procesů? To se mi nezdá - tyto části zabírají většinou pár KB, u větších programů výjimečně i jednotky MB, ale nic víc. A nenapadá mě nic dalšího, co by šlo načíst z disku bez použití swapu. Ale něco na tom pravdy bude, jinak by HDD LED nesvítila.
I kdyby to byla pravda, kernel by v žádném případě neměl takto kompletně zamrznout na takovou dobu, OOM killer měl zasáhnout v řádech sekund, ne minut. Nezávisle na tom, že "k OOM stejně v reálném nasazení jen tak nedojde", je to prostě chyba designu. Jasně, systém se může zotavit sám i bez zabití nějakého procesu, ale pokud to nenastane do pár sekund, je lepší zavolat OOM killera, aby alespoň ostatní služby (ty, které mají např. oom_adj na -17) mohly běžet.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.