Sobes.tech
Middle

Jak Linux decyduje, który proces zakończyć?

sobes.tech AI

Odpowiedź od AI

Linux używa algorytmu OOM (Out-Of-Memory) Killer do określenia, które procesy należy zakończyć, gdy system nie ma wystarczającej ilości pamięci RAM. Algorytm ten analizuje różne metryki, aby wybrać procesy z najmniejszym negatywnym wpływem na system po ich zakończeniu.

Główne czynniki brane pod uwagę przez OOM Killer:

  • oom_score: Liczbowy wskaźnik odzwierciedlający prawdopodobny wpływ zakończenia procesu na system. Im wyższy wynik, tym bardziej prawdopodobne, że proces zostanie wybrany do zakończenia. Wynik ten oblicza się na podstawie zużycia pamięci przez proces, priorytetu procesu (wartość nice) i innych czynników.
  • Ilość używanej pamięci: Procesy zużywające dużą ilość pamięci zazwyczaj mają wyższy oom_score.
  • Priorytet procesu: Procesy o niższym priorytecie (wyższa wartość nice) mają większą szansę na zakończenie.
  • Czas życia procesu: "Młodsze" procesy mogą mieć wyższy oom_score.
  • Proces nadrzędny: OOM Killer stara się nie kończyć krytycznych procesów systemowych lub procesów, od których zależą inne ważne procesy.

Użytkownik może wpływać na zachowanie OOM Killer, zmieniając wartość oom_score_adj dla wybranych procesów. To przesunięcie jest dodawane do bazowego oom_score, umożliwiając uczynienie procesu mniej lub bardziej prawdopodobnym do zakończenia.

# Wyświetl aktualny oom_score dla procesu o PID 1234
cat /proc/1234/oom_score

# Wyświetl aktualny oom_score_adj dla procesu o PID 1234
cat /proc/1234/oom_score_adj

# Ustaw minimalną wartość oom_score_adj (-1000) dla procesu o PID 1234
# To praktycznie gwarantuje, że proces nie zostanie zakończony przez OOM Killer
echo -1000 > /proc/1234/oom_score_adj

W ten sposób Linux decyduje, który proces zakończyć w warunkach niedoboru pamięci, opierając się na złożonym algorytmie, który waży różne czynniki, aby zminimalizować negatywne skutki dla stabilności systemu.