Błędy związane z pamięcią RAM (Out of Memory - OOM): Zrozumienie zarządzania pamięcią, procesy zużywające za dużo zasobów i sposoby radzenia sobie z OOM Killerem
Linux

Błędy związane z pamięcią RAM (Out of Memory – OOM): Zrozumienie zarządzania pamięcią, procesy zużywające za dużo zasobów i sposoby radzenia sobie z OOM Killerem

Błędy związane z pamięcią RAM (Out of Memory – OOM): Zrozumienie zarządzania pamięcią, procesy zużywające za dużo zasobów i sposoby radzenia sobie z OOM Killerem


🧠 Wprowadzenie

Zarządzanie pamięcią w systemie Linux to kluczowy element stabilności działania systemu. Gdy pamięć RAM i przestrzeń wymiany (swap) zostaną wyczerpane, system uruchamia OOM Killera (Out of Memory Killer) – mechanizm, który zabija procesy zużywające najwięcej pamięci, by uratować system przed całkowitym zawieszeniem. W tym artykule wyjaśnimy, czym jest OOM Killer, jak diagnozować problemy z pamięcią i jak zapobiegać takim sytuacjom w przyszłości.


🧮 Jak Linux zarządza pamięcią?

Linux dynamicznie zarządza pamięcią RAM, dzieląc ją na:

  • Pamięć aktywną – dla działających procesów
  • Pamięć buforowaną – dla plików i I/O
  • Pamięć wymiany (swap) – gdy RAM się kończy

👉 Komenda do podglądu użycia pamięci:

free -h

💥 Co to jest OOM Killer?

OOM Killer to mechanizm jądra systemu Linux, który uruchamia się w sytuacji braku dostępnej pamięci RAM i swap. Wybiera procesy do „zabicia”, aby odzyskać pamięć.

📌 Typowy wpis z logu systemowego:

Out of memory: Kill process 1234 (firefox) score 987 or sacrifice child
Killed process 1234 (firefox), UID 1000, total-vm:2048576kB

🔍 Jak znaleźć procesy zużywające pamięć?

1. top i htop

top
  • Sortowanie według zużycia pamięci: Shift + M

2. ps z sortowaniem

ps aux --sort=-%mem | head

3. smem

Lepsze podsumowanie rzeczywistego użycia pamięci:

sudo apt install smem
smem -rs rss

📈 Diagnostyka OOM

1. Przegląd logów:

dmesg | grep -i 'oom'
journalctl -k | grep -i 'killed process'

2. Śledzenie wykorzystania pamięci:

  • Użycie vmstat:
vmstat 5
  • Sprawdzanie stanu pamięci:
cat /proc/meminfo

🔒 Zapobieganie OOM Killerowi

Błędy związane z pamięcią RAM (Out of Memory - OOM): Zrozumienie zarządzania pamięcią, procesy zużywające za dużo zasobów i sposoby radzenia sobie z OOM Killerem
Błędy związane z pamięcią RAM (Out of Memory – OOM): Zrozumienie zarządzania pamięcią, procesy zużywające za dużo zasobów i sposoby radzenia sobie z OOM Killerem

🧱 1. Konfiguracja limitów procesów (ulimit)

Ustal limity pamięci dla użytkowników lub procesów:

ulimit -v 1048576  # maks. 1 GB pamięci

📁 2. Cgroups

Użyj cgroups, by ograniczyć użycie pamięci przez konkretne procesy, np. kontenery Dockerowe:

docker run -m 512m ubuntu

⚙️ 3. Swappiness

Dostosowanie poziomu użycia SWAP:

cat /proc/sys/vm/swappiness
echo 10 > /proc/sys/vm/swappiness

📌 4. oom_score_adj

Możesz ustawić priorytety zabijania procesów:

echo -1000 > /proc/$(pidof critical_process)/oom_score_adj
  • -1000 oznacza „nie zabijaj nigdy”
  • +1000 oznacza „zabij w pierwszej kolejności”
Czytaj  Jak sprawdzić wersję jądra systemu Linux

🧪 Przykład rzeczywisty

📦 Problem:

Aplikacja Java na serwerze nagle zostaje „zabita”, a użytkownicy zgłaszają przerwy w działaniu.

📋 Diagnoza:

  1. Sprawdzenie logów:
journalctl -k | grep -i java
  1. Znaleziono wpis:
Out of memory: Kill process 8765 (java) score 982 or sacrifice child
  1. Ustalenie przyczyny: brak limitu pamięci JVM → zużycie całej RAM

🛠️ Rozwiązanie:

Dodano ograniczenie pamięci:

java -Xmx512m -jar app.jar

✅ Dobre praktyki

  • Monitoruj system (top, htop, vmstat, ps)
  • Konfiguruj limity pamięci (ulimit, cgroups)
  • Unikaj aplikacji działających bez ograniczeń pamięci
  • Zadbaj o wystarczający swap
  • Ustal priorytety z oom_score_adj

🧠 Podsumowanie

OOM Killer to przydatny, ale groźny mechanizm. Zrozumienie działania zarządzania pamięcią w Linuksie, regularne monitorowanie oraz stosowanie limitów i priorytetów procesów może zapobiec niespodziewanym awariom usług. W środowiskach produkcyjnych każda sekunda dostępności ma znaczenie — dlatego warto zawczasu skonfigurować system tak, by radził sobie z przeciążeniem pamięci bezboleśnie.

 

Polecane wpisy
Zabezpieczanie serwera poczty (SPF, DKIM, DMARC) w Debianie – Podstawy Linux
Zabezpieczanie serwera poczty (SPF, DKIM, DMARC) w Debianie – Podstawy Linux

Zabezpieczanie serwera poczty (SPF, DKIM, DMARC) w Debianie – Podstawy Linux Bezpieczeństwo poczty elektronicznej to kluczowy aspekt administrowania serwerem. Nieautoryzowane Czytaj dalej

Zrozumienie systemu plików w Linux: ext4, XFS, Btrfs – który wybrać?
Zrozumienie systemu plików w Linux: ext4, XFS, Btrfs – który wybrać?

📂 Zrozumienie systemu plików w Linux: ext4, XFS, Btrfs – który wybrać? 📌 Wprowadzenie Wybór systemu plików to decyzja fundamentalna Czytaj dalej

Marek "Netbe" Lampart Inżynier informatyki Marek Lampart to doświadczony inżynier informatyki z ponad 25-letnim stażem w zawodzie. Specjalizuje się w systemach Windows i Linux, bezpieczeństwie IT, cyberbezpieczeństwie, administracji serwerami oraz diagnostyce i optymalizacji systemów. Na netbe.pl publikuje praktyczne poradniki, analizy i instrukcje krok po kroku, pomagając administratorom, specjalistom IT oraz zaawansowanym użytkownikom rozwiązywać realne problemy techniczne.