Содержание
Я уверен, что каждый пользователь в своей жизни хоть раз сталкивался с явлением переполнения оперативной памяти или OOM (Out Of Memory). Все помнят как это происходит: система встаёт раком колом, ядро начинает грузить свопом жёсткий диск на 100%, хорошо если можно хоть курсором двигать, хотя это уже делу не поможет. В этом случае помогает только перезагрузка. А ведь мы же только Libre Office с Chromium на 2 ГБ ОЗУ запустили! Не понятно, почему ядро Linux так плохо справляется с переполнением оперативки, но с этим явлением можно успешно бороться своими силами и при минимуме накладных затрат.
В борьбе с явлением OOM нам поможет Nohang — демон для GNU/Linux, предотвращающий наступление явления переполнения оперативной памяти устройства путём принудительного завершения «прожорливого» процесса.
Принцип работы
Nohang в виде демона постоянно находится в оперативной памяти устройства (потребляет ~10 Мб ОЗУ) и следит за свободным количеством оперативной памяти и своп-раздела. Как только наступает условие явной нехватки ОЗУ и свопа (эти параметры указываются в конфигурационном файле приложения) Nohang принудительно завершает «жирное» приложение, вызвавшее нехватку оперативной памяти устройства.
В качестве примера — скриншот окна монитора ресурсов KDE, на котором отображена работа демона Nohang.
На среднем графике видны факты наступления состояния OOM (переполнения памяти) ОЗУ компьютера, на котором производился эксперимент. Оперативная память накачивалась бесполезными пустыми данными с помощью команды:
tail /dev/zero
Как видно, после первой попытки своп заполнился на 100% (в качестве свопа использовался раздел zRam) так же, как и ОЗУ, после чего Nohang прибивает процесс tail и оперативная память снова освобождается, возвращаясь к значению свободного места, которое имела до начала эксперимента. Интересно то, что своп остаётся заполненным практически на 100%, но при следующих попытках исчерпать всю доступную ОЗУ это не приводит к зависанию всей системы, и Nohang снова завершает прожорливый процесс tail, освобождаю ОЗУ. По субъективным ощущениям для пользователя, происходит кратковременное подтормаживание системы на пару секунд, после чего контроль над системой возвращается без каких-либо проблем. В общем — сказка!
Установка Nohang в различных дистрибутивах Linux
Так как не все, как я, используют в своей работе Arch Linux, рассмотрим процесс установки Nohang для всех самых популярных дистрибутивов.
Arch Linux, Manjaro Linux
pacaur -S nohang-git
sudo systemctl enable --now nohang
Debian GNU/Linux, Ubuntu, Linux Mint
Устанавливаем из Github:
git clone https://github.com/hakavlad/nohang.git
cd nohang
sudo make install-desktop
sudo make systemd
Если уведомления на рабочем столе не нужны, заменяем «sudo make install-desktop» на «sudo make install«
Fedora, RHEL, openSUSE
sudo dnf copr enable atim/nohang
sudo dnf install nohang
sudo systemctl enable --now nohang
Настройка
Все параметры Nohang настраиваются в конфигурационном файле
/etc/nohang/nohang.conf
В принципе, всё можно оставить как есть, параметры по-умолчанию там оптимальны для любой конфигурации железа.
Включение оповещений на рабочем столе
Чтобы включить всплывающие оповещения о нехватке ОЗУ и завершении приложений Nohang, нужно в файле конфигурации изменить следующие параметры на значение «True» чтобы получилось вот так:
post_action_gui_notifications = True
low_memory_warnings_enabled = True
После чего сохранить изменения в конфигурационном файле и перезапустить Nohang для применения новой конфигурации:
sudo systemctl restart nohang.service
Проверка
Проверяем состояние демона Nohang:
sudo systemctl status nohang.service
Статус работы должен быть указан зелёным цветом:
Active: active (running)
Если так — Nohang запущен и работает нормально, можно приступать к экспериментам.
Это я на всякий случай 😏 Что ж, инициируем процесс накачки оперативной памяти пустыми данными:
tail /dev/zero
И смотрим что из этого получится 😀 По идее, вы можете почувтвовать непродолжительный дискомфорт, проявляющийся в зависании системы на несколько секунд, после чего Nohang должен отработать по tail и управление системы вернётся в ваши руки. А точнее, скорее всего так и произойдёт, что можно будет считать успешным достижением поставленной цели.
Так же можно установить более легковесный менеджер OOM — Earlyoom.