Earlyoom

Earlyoom – предотвращаем ситуацию OOM в Linux быстро и просто

Если вы рабо­та­е­те с «тяже­лы­ми» при­ло­же­ни­я­ми в усло­ви­ях нехват­ки опе­ра­тив­ной памя­ти, вам зна­ко­ма такая ситу­а­ция, как OOM – Out Of Memory, это когда запу­щен­ным про­грам­мам нуж­но боль­ше опе­ра­тив­ной памя­ти, чем име­ет­ся в систе­ме. В такой ситу­а­ции систе­ма обыч­но начи­на­ет сва­пить­ся на диск и при этом тор­мо­зить, что непри­ят­но для поль­зо­ва­те­ля. У меня в бло­ге уже был мате­ри­ал про Nohang, так вот Earlyoom дела­ет всё то же самое, ну кро­ме отоб­ра­же­ния уве­дом­ле­ний, но в то же вре­мя менее тре­бо­ва­тель­на к кон­фи­гу­ра­ции ком­пью­те­ра.

Earlyoom авто­ма­ти­че­ски завер­ша­ет про­грам­му, если она при­во­дит к исчер­пы­ва­нию всей сво­бод­ной ОЗУ в систе­ме, предот­вра­щая ситу­а­цию нехват­ки опе­ра­тив­ной памя­ти – OOM. Усло­вия сра­ба­ты­ва­ния такие:

sending SIGTERM when mem <= 10.00% and swap <= 10.00%,
        SIGKILL when mem <=  5.00% and swap <=  5.00%

Установка, включение автозапуска и запуск Earlyoom в различных дистрибутивах Linux

Earlyoom име­ет­ся в репо­зи­то­ри­ях всех попу­ляр­ных дис­три­бу­ти­вов Linux.

Arch Linux, Manjaro Linux

sudo pacman -S earlyoom
sudo systemctl enable earlyoom.service
sudo systemctl start earlyoom.service

Debian GNU/Linux, Ubuntu, Linux Mint

sudo apt install earlyoom
sudo systemctl enable earlyoom.service
sudo systemctl start earlyoom.service

Проверка работы

Узнать ста­тус про­цес­са Earlyoom мож­но с помо­щью сле­ду­ю­щей коман­ды:

sudo systemctl status earlyoom.service

Если в ста­ту­се ука­за­но «Active: active (running)» – всё в поряд­ке, Earlyoom запу­щен и пра­виль­но рабо­та­ет. Теперь мож­но устро­ить в систе­ме ката­стро­фи­че­скую нехват­ку опе­ра­тив­ной памя­ти для про­вер­ки рабо­ты Earlyoom. Для это­го преж­де все­го отклю­чим swap на дис­ке, если тако­вой име­ет­ся, что­бы не ждать пока он запол­нит­ся.

sudo swapoff -a

Ну а теперь заби­ва­ем всю доступ­ную в систе­ме опе­ра­тив­ную память нуля­ми:

tail /dev/zero

Далее долж­но про­изой­те сле­ду­ю­щее: про­цесс tail дол­жен занять всю доступ­ную ОЗУ в систе­ме, после чего его дол­жен при­бить Earlyoom, тем самым осво­бо­див опе­ра­тив­ную память. Если у вас про­изо­шло имен­но так – поздрав­ляю, всё рабо­та­ет как и долж­но! Успе­хов!