/proc/pid/oom_score_adj - dostosowanie wyniku dla OOM-killera
- /proc/pid/oom_score_adj (od Linuksa 2.6.36)
- Plik może być użyty do dostosowania heurystyki zwanej
„badness”, używanej do wybrania procesu który
zostanie zabity w sytuacji braku pamięci.
- Przypisuje ona do każdego potencjalnego zadania
wartość od 0 (nigdy nie zabija) do 1000 (zawsze zabija) aby
określić docelowy proces do zabicia. Jednostki są z
grubsza proporcjonalne do pamięci, którą proces
może przydzielić, obliczaną w oparciu do
bieżącego użycia pamięci i pamięci
wymiany. Na przykład zadanie używające
całą dozwoloną pamięć otrzyma wynik
1000, a jeśli użyje połowę dozwolonej
pamięci, otrzyma wynik 500.
- Dodatkowym czynnikiem w wyniku „badness” jest fakt,
że procesy roota mają dodatkowe 3% pamięci w stosunku
do pozostałych procesów.
- Wielkość „dozwolonej” pamięci
zależy od kontekstu w jakim wywołano OOM-killera.
Jeśli wynika to z faktu, że pamięć
przeznaczona dla zadania alokującego cpuset została
wyczerpana, to dozwolona pamięć odpowiada zestawowi
pamięci przypisanego do tego cpuset (zobacz cpuset(7)).
Jeśli jest to skutek zasad dot. pamięci węzła
(lub węzłów), to dozwolona pamięć
odpowiada zestawowi tych zasad. Jeśli wynika to z faktu, że
osiągnięto limit pamięci (lub pamięci wymiany)
to dozwolona pamięć jest tak ustawionym limitem. Gdy wynika
to z sytuacji braku pamięci, to dozwolona pamięć
odpowiada wszystkim zaalokowanym zasobom.
- Wartość oom_score_adj jest dodawana do wyniku
„badness” przed użyciem jej do wybrania procesu
przeznaczonego do zabicia. Dozwolone wartości wynoszą od
-1000 (OOM_SCORE_ADJ_MIN) do +1000 (OOM_SCORE_ADJ_MAX). Pozwala to
przestrzeni użytkownika na kontrolę preferencji OOM-killing.
Można w ten sposób zawsze preferować dane zadanie lub
całkowicie wyłączyć je z procesu OOM-killing.
Najniższa dostępna wartość (-1000) jest
równoznaczna z całkowitym wyłączeniem
OOM-killing dla danego zadania, ponieważ zawsze zwróci ono
wynik „badness” równy 0.
- Z tego względu łatwo jest zdefiniować
wielkość pamięci dla każdego zadania przez
przestrzeń użytkownika. Ustawienie wartości
oom_score_adj np. na +500 jest w przybliżeniu odpowiednikiem
pozwolenia pozostałym zadaniom w tym samym systemie, cpuset,
zasadom dot. pamięci i zasobom kontrolera pamięci na
użycie co najmniej 50% pamięci więcej. Z kolei
wartość -500 odpowiada mniej więcej zmniejszeniu o
50% dozwolonej pamięci.
- Z powodu zgodności wstecznej ze starszymi jądrami do
modyfikacji wyniku „badness” wciąż
można używać /proc/pid/oom_adj. Jego
wartość skaluje się liniowo z
oom_score_adj.
- Zapis do /proc/pid/oom_score_adj lub
/proc/pid/oom_adj zmieni zapis w drugim pseudopliku na
przeskalowaną odpowiednio wartość.
- Program choom(1) zapewnia interfejs wiersza poleceń do
dostosowywania wartości oom_score_adj
działającego procesu lub nowo wykonywanego polecenia.
- /proc/pid/oom_adj (od Linuksa 2.6.11)
- Plik może być użyty do dostosowania wyniku,
używanego do wybrania procesów do zabicia, w przypadku
sytuacji braku pamięci (out-of-memory - OOM). Jądro
używa tej wartości do operacji przesunięcia bitowego
wartości oom_score procesu: poprawne wartości
mieszczą się w zakresie od -16 do +15, wraz ze
specjalną wartością -17, która
całkowicie wyłącza zabijanie przy OOM danego procesu.
Dodatni wynik zwiększa prawdopodobieństwo, że proces
zostanie zabity przez OOM-killer, ujemny zmniejsza je.
- Domyślną wartością tego pliku jest 0, nowy
proces dziedziczy ustawienie oom_adj swojego rodzica. Proces musi
być uprzywilejowany (CAP_SYS_RESOURCE) aby móc
zaktualizować ten plik, choć może zawsze
zwiększyć swoje ustawienie oom_adj (od Linuksa
2.6.20).
- Od Linuksa 2.6.36 używanie tego pliku jest przestarzałe, na
korzyść /proc/pid/oom_score_adj, a
usunięto go w Linuksie 3.7.
Tłumaczenie niniejszej strony podręcznika: Przemek
Borys <pborys@dione.ids.pl>, Robert Luberda <robert@debian.org>
i Michał Kułach <michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną
dokumentacją. Bliższe informacje o warunkach licencji
można uzyskać zapoznając się z
GNU General
Public License w wersji 3 lub nowszej. Nie przyjmuje się
ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika
prosimy zgłaszać na adres listy dyskusyjnej
manpages-pl-list@lists.sourceforge.net.