Po ośmiu miesiącach prac rozwojowych wydanie procesu w tle , który okresowo sprawdza ilość dostępnej pamięci (MemAvailable, SwapFree) i stara się zareagować na wystąpienie niedoboru pamięci na wczesnym etapie. Kod projektu został napisany w języku C i jest objęty licencją MIT.
Jeśli ilość dostępnej pamięci jest mniejsza od ustalonej wartości, earlyoom wymusi (poprzez wysłanie SIGTERM lub SIGKILL) zakończenie procesu, który najbardziej intensywnie zużywa pamięć (mającego najwyższy wskaźnik /proc/*/oom_score), nie doprowadzając stanu systemu do oczyszczenia buforów systemowych i utrudniając działanie swapowania (handler OOM (Out Of Memory) w jądrze uruchamia się, gdy stan niedoboru pamięci już osiągnął krytyczne wartości i zwykle w tym momencie system już nie reaguje na działania użytkownika).
Earlyoom obsługuje wysyłanie powiadomień o wymuszonym zakończeniu procesów na pulpit (za pomocą notify-send), a także zapewnia możliwość definiowania reguł, w których przy użyciu wyrażeń regularnych można określić nazwy procesów, których zakończenia się preferuje (opcja «—prefer») lub których należy unikać (opcja «—avoid»).
Podstawowe w nowym wydaniu:
- Dzięki atrybutom procesów logika wyboru procesów do zakończenia przyspieszona o 50%;
- Zarejestrowano w logu UID zakończonego procesu, oprócz PID i nazwy procesu;
- Dodano podświetlenie logu debugowania jasnoszarym kolorem;
- Przeprowadzono czyszczenie kodu;
- Tam, gdzie to możliwe, wykorzystano deklaracje lokalnych zmiennych dla bloków;
- Dodano opcję PATH_LEN do zastąpienia wbudowanej w kod wartości rozmiaru bufora;
- Zapewniono uruchomienie cppcheck, jeśli jest dostępny;
- Dodano test wydajności «make bench»;
- Rozszerzono zestaw testów (make test);
- Wprowadzono reset uprawnień root w pliku jednostki systemd earlyoom.service. Ta zmiana możliwość powiadomień GUI. Aby włączyć powiadomienia GUI, zaleca się przywrócenie uprawnień root, odkomentowując «DynamicUser=true». Wyłączenie root również prowadzi do braku możliwości uzyskania informacji o zużyciu pamięci przy montowaniu /proc w trybie hidepid=1 lub hidepid=2.
Źródło: opennet.ru
