GNU/Linux >> Znalost Linux >  >> Linux

OOM zabiják zabíjející věci se spoustou (?) volné RAM

Řešení 1:

Právě jsem se podíval na výpis oom logu a pochybuji o přesnosti toho grafu. Všimněte si prvního řádku 'Node 0 DMA32'. Říká to free:3376kB , min:3448kB a low:4308kB . Kdykoli volná hodnota klesne pod nízkou hodnotu, kswapd by měl začít vyměňovat věci, dokud se tato hodnota opět nezvýší nad vysokou hodnotu. Kdykoli volné klesne pod min, systém v podstatě zamrzne, dokud ho jádro nedostane zpět nad min. Tato zpráva také naznačuje, že swap byl zcela použit, kde je uvedeno Free swap = 0kB .
V zásadě se tedy spustil kswapd, ale swap byl plný, takže nemohl nic dělat a hodnota pages_free byla stále pod hodnotou pages_min, takže jedinou možností bylo začít zabíjet věci, dokud se nepodařilo obnovit pages_free.
Určitě vám došla paměť.

http://web.archive.org/web/20080419012851/http://people.redhat.com/dduval/kernel/min_free_kbytes.html má opravdu dobré vysvětlení, jak to funguje. Viz část 'Implementace' dole.

Řešení 2:

Zbavte se skriptu drop_caches. Kromě toho byste měli zveřejnit příslušné části vašeho dmesg a /var/log/messages výstup zobrazující zprávy OOM.

Chcete-li však toto chování zastavit, doporučuji vyzkoušet tento sysctl naladitelný. Toto je systém RHEL/CentOS 6 a zjevně běží na omezených zdrojích. Je to virtuální počítač?

Zkuste upravit /proc/sys/vm/nr_hugepages a zjistěte, zda problémy přetrvávají. Může se jednat o problém s fragmentací paměti, ale zjistěte, zda toto nastavení neovlivňuje. Chcete-li, aby byla změna trvalá, přidejte vm.nr_hugepages = value na váš /etc/sysctl.conf a spusťte sysctl -p znovu přečíst konfigurační soubor...

Viz také:Interpretace kryptických zpráv jádra „selhání alokace stránek“

Řešení 3:

V grafu nejsou k dispozici žádná data od začátku OOM zabijáka do jeho konce. Věřím, že v časovém rámci, kde je graf přerušen, ve skutečnosti spotřeba paměti prudce stoupne a již není k dispozici žádná paměť. Jinak by se OOM zabiják nepoužil. Pokud se podíváte na graf volné paměti poté, co se zabiják OOM zastavil, můžete vidět, že klesá z vyšší hodnoty než předtím. Alespoň odvedl svou práci správně a uvolnil paměť.

Všimněte si, že váš odkládací prostor je téměř plně využit až do restartu. To téměř nikdy není dobré a neklamné znamení, že zbývá málo volné paměti.

Důvodem, proč pro tento konkrétní časový rámec nejsou k dispozici žádná data, je to, že systém je příliš zaneprázdněn jinými věcmi. "Vtipné" hodnoty ve vašem seznamu procesů mohou být pouze výsledkem, nikoli příčinou. Není to neslýchané.

Podívejte se na /var/log/kern.log a /var/log/messages, jaké informace tam najdete?

Pokud se také zastavilo protokolování, zkuste jiné věci, vypisujte seznam procesů do souboru přibližně každou sekundu, stejně jako informace o výkonu systému. Spusťte jej s vysokou prioritou, aby mohl stále vykonávat svou práci (doufejme), když zatížení stoupne. I když pokud nemáte jádro s preemptem (někdy označované jako "serverové" jádro), můžete mít v tomto ohledu smůlu.

Myslím, že zjistíte, že příčinou je (jsou) procesy, které využívají nejvíce CPU% v době, kdy vaše problémy začínají. Nikdy jsem neviděl rsyslogd ani mysql chovat se tímto způsobem. Pravděpodobnějšími viníky jsou aplikace Java a aplikace řízené gui, jako je prohlížeč.


Linux
  1. Přijmout signál, než je proces zabit Oom Killer / Cgroups?

  2. Program Python zabírá RAM

  3. Jak získat % využití paměti pomocí vmstat?

  1. Linux – správně určit využití paměti v Linuxu?

  2. Měření využití Ram programu?

  3. Proč se používá Swap, když zbývá spousta volné paměti?

  1. Linux – Jak se Oom Killer rozhodne, který proces zabije jako první?

  2. Debian – Oom Killer nefunguje správně, vede k zamrzlému OS?

  3. Diagnostika nedostatku paměti Windows