Sekretów zabójcy część druga
bluszcz napisał ciekawy opis kodu linuksowego OOM killera.
Zaciekawiony tematem pokopałem trochę i okazuje się co następuje:
W jednej ze starszych wersji jądra można było go w ogóle wyłączyć.
W 2.6.x z tego co widzę nie ma takiej możliwości.
Za to można wyłączać oom killer per proces!!!
Są sobie albowiem (przynajmniej w 2.6.21 które akurat mam pod ręką) pseudopliki:
/proc/<pid>/oom_score — tu można podejrzeć aktualny badness score dla procesu,
oraz
/proc/<pid>/oom_adj - tu można sterować wysokością badness score :)
Dozwolone wartości to liczby całkowite z zakresu [-17,+15]. Wysoka wartość to większe prawdopodobieństwo zabicia.
/*
* Adjust the score by oomkilladj.
*/
if (p->oomkilladj) {
if (p->oomkilladj > 0)
points <<= p->oomkilladj;
else
points >>= -(p->oomkilladj);
}
Wartość -17 jest magiczna o tyle że blokuje w ogóle możliwość zabicia procesu przez oom killer.
if (p->oomkilladj == OOM_DISABLE)
continue;
Zatem nasz zabójca ma słaby punkt.
Stosować z umiarem!
Tags: oom, programowanie, unix
September 14th, 2007 at 14:27
Zajebiste - u mnie też to jest.
bluszcz@antichrist:~$ uname -a
Linux antichrist 2.6.20-16-generic #2 SMP Thu Jun 7 20:19:32 UTC 2007 i686 GNU/Linux
bluszcz@antichrist:~$