GNU/Linux >> Znalost Linux >  >> Linux

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

Tato odpověď vysvětluje akce provedené jádrem, když dojde k situaci OOM, na základě hodnoty sysctl vm.overcommit_memory .

Když overcommit_memory je nastaven na 0 nebo 1, overcommit je povoleno a programy mohou alokovat více paměti, než je skutečně dostupné.

Co se teď stane, když nám v této situaci dojde paměť? Jak funguje OOM zabiják rozhodnout, který proces zabít jako první?

Přijatá odpověď:

Pokud je paměť vyčerpávajícím způsobem spotřebována procesy do té míry, která může případně ohrozit stabilitu systému, přichází na řadu zabiják OOM.

POZNÁMKA: Úkolem OOM Killeru je pokračovat v zabíjení procesů, dokud se neuvolní dostatek paměti pro hladké fungování zbytku procesu, který se jádro pokouší spustit.

OOM Killer musí vybrat nejlepší proces(y) zabít. Nejlepší zde se odkazuje na proces, který při zabíjení uvolní maximum paměti a je také pro systém nejméně důležitý.

Primárním cílem je zabít co nejmenší počet procesů, což minimalizuje způsobené škody a zároveň maximalizuje množství uvolněné paměti.

Aby to bylo usnadněno, jádro udržuje oom_score pro každý z procesů. Můžete vidět oom_score každého z procesů v /proc souborový systém pod pid adresář.

$ cat /proc/10292/oom_score

Čím vyšší je hodnota oom_score jakéhokoli procesu, tím vyšší je pravděpodobnost, že bude zabit OOM Killerem v situaci nedostatku paměti.

Jak je na tom OOM_Score vypočítané?

V Davidově sadě patchů jsou staré heuristiky badness() téměř úplně
pryč. Místo toho se výpočet změní na jednoduchou otázku, jaké
procento dostupné paměti proces využívá. Pokud
má systém jako celek nedostatek paměti, pak „dostupná paměť“ je
součet veškeré paměti RAM a odkládacího prostoru, které má systém k dispozici.

Pokud je místo toho situace OOM způsobena vyčerpáním paměti povolené
dané cpuset/kontrolní skupině, pak „dostupná paměť“ je celkové
množství přidělené této kontrolní skupině. Podobný výpočet se provede
, pokud byly překročeny limity stanovené zásadou paměti. V každém případě se
za využití paměti procesem považuje součet jeho rezidentní
sady (počet stránek RAM, které používá) a využití swapu.

Výsledkem tohoto výpočtu je číslo procento krát deset;
proces, který využívá každý bajt paměti, kterou má k dispozici, bude
mít skóre 1 000, zatímco proces, který vůbec nepoužívá paměť, dostane
skóre nula. V tomto skóre je jen velmi málo heuristických úprav,
ale kód stále odečítá malé množství (30) od skóre
procesů vlastněných rootem na základě představy, že jsou o něco více
hodnotnější než procesy vlastněné uživateli.

Jedním dalším vylepšením, které se použije, je přidání hodnoty uložené v proměnné oom_score_adj každého
procesu, kterou lze upravit pomocí /proc.
Tento knoflík umožňuje upravit atraktivitu každého procesu
OOM zabiják v uživatelském prostoru; nastavení na -1000 zcela deaktivuje zabíjení OOM
, zatímco nastavení na +1000 je ekvivalentem malování
velkého cíle na přidružený proces.

Odkazy

Související:Nevýhoda při použití chrootu ve vysoce výkonných počítačích?

http://www.queryhome.com/15491/whats-happening-kernel-starting-killer-choose-which-process https://serverfault.com/a/571326


Linux
  1. Jak zabít proces zombie na Linuxu

  2. Jak najít a zabít zombie proces v Linuxu

  3. Jak zabít největší proces v nereagujícím systému Linux

  1. Zjištění, který proces zabil Linux OOM killer

  2. Jak interně funguje copy_from_user z jádra Linuxu?

  3. Jak si Linux zachovává kontrolu nad CPU na jednojádrovém stroji?

  1. Jak zabít proces v Linuxu pomocí příkazu?

  2. Linux Out-of-Memory Killer

  3. Jak se v Linuxu hlásí využití paměti?