Всем доброго времени суток!
К сожалению, когда я только установил свой первый дистрибутив Linux (Debian), несмотря на его легковесность, все же, из-за малого объема ОЗУ, я сталкивался с одной очень серьезной проблемой. И она меня бесила.
Все дело в оперативной памяти
Во времена моего познания систем Linux, у меня было 2 ГБ оперативной памяти. Тогда я учился программированию и приходилось запускать множество всего - браузер, редактор кода, документы и т. п.
Естественно, бывали случаи, когда ОЗУ не хватало. Но это не самое страшное, подумали вы - ну завершится пару-тройку процессов, нечего страшного. Вот только, если вы так говорите - вы никогда не пользовались ОС Linux.
Что происходит, когда забивается ОЗУ в Windows?
На самом деле, я очень люблю систему Linux и часто говорю, что она во многом лучше, чем в Windows.
Если вы хотите узнать конкретно - в чем лучше, а в чем хуже - в конце статьи оставлю ссылку на минусы обeих ОС.
Но есть в Windows кое-что лучше, чем в Linux. И этого я не упоминал. Это - механизм работы с процессами при критической нехватки ОЗУ.
Ребята, у нас есть Telegram-группа. Там вы можете задать свой вопрос, поделиться своим мнением или впечатлениями от использования Linux-дистрибутивов.
Ссылка в конце статьи!
В Windows, если ОЗУ недостаточно, то система, во-первых, не дает компьютеру окончательно "зависнуть", ну и, во-вторых, освобождает не самый "жористый" процесс, а самый "жористый" из старых. Linux же идет ва-банк!
И что делает Linux?
Дело в том, что почти все ОС Linux, при нехватки ОЗУ, не спешат её освобождать. Вы не волнуйтесь - у этой ОС тоже есть свой алгоритм освобождения оперативной памяти при нехватке, под названием ООМ Killer.
Расшифровывается сие чудо, как Out Of Memory Killer и, дословно, переводится, как "убийца при нехватки памяти". Делает он весьма простую вещь - когда оперативная память закончилась, он "выходит на охоту" и убивает тот процесс, который даст больше всего свободной ОЗУ.
Казалось бы, в чем проблем? Это же просто гениально! Но, не все так просто.
Беда в следующем - перед тем, как активизироваться, компьютер, при достижении особого критического значения ОЗУ, просто намертво зависает. И пользователь ничего не может сделать - выключить не может (важные данные), компьютер не реагирует (так как ожидает освобождения оперативной памяти).
Выходов из этой ситуации всего-лишь три :
- Подождать 3-10 минут
- Докупить ОЗУ
- Не запускать тяжелые приложения/устанавливать легковесные дистрибутивы
Но есть ещё и 4-ый вариант. И он самый эффективный!
EarlyOOM
Данное решение призвано заменить этот неудобный и малоэффективный ООМ Killer'у .
Эта утилита легко устанавливается (доступна в большинстве репозиториях), а также имеет хорошую документацию и, самое главное - она работает!
Программка занимает от силы 2 МБ свободной памяти и, при достижении заданного значения заполненности ОЗУ, просто убивает самый жрущий процесс. Что может быть проще?
Установка и настройка
Если у вас дистрибутив, на базе Debian (Ubuntu/Linux Mint)
sudo apt install earlyoom
sudo systemctl enable earlyoom
sudo systemctl start earlyoom
На базе Red Hat (Fedora, Red Hat Linux Enterprise)
sudo dnf install earlyoom
sudo systemctl enable --now earlyoom
На базе Arch Linux (Manjaro, Arch)
sudo pacman -S earlyoom
sudo systemctl enable --now earlyoom
Её значений по умолчанию, по сути, достаточны для продуктивной работы. Однако, вот её дополнительные параметры :
- -m: количество свободной памяти в процентах, при котором необходимо начинать чистку.
- -s: количество свободной «подкачки» в процентах при котором необходимо начинать чистку.
- -M: аналогично -m, но размер в кибибайтах (KiB, 1 KiB = 1024 bytes).
- -S: аналогично -s, но размер в кибибайтах (KiB).
- --prefer: регулярное выражение, описывающее процессы, которые стоит убивать в первую очередь.
- --avoid: регулярное выражение, описывающее процессы, которые стоит убивать в последнюю очередь.
- -N: команда, используемая для отправки нотификаций в случае срабатывания сервиса.
Это все можно вписать в файл /etc/default/earlyoom. Вот пример :
EARLYOOM_ARGS="-m 5 -s 60 --prefer '(^|/)(firefox|thunderbird)$' --avoid '(^|/)(sshd|systemd|init)'
После изменений файла рекомендую перезапустить earlyoom. А исходный код можете найти по данной ссылке.
Друзья, у нас есть Telegram-группа, где могут помочь с вашей проблемой с Linux и где вы сможете приятно пообщаться с единомышленниками.
Присоединяйтесь!
Другие статьи :
- "Мне нечего скрывать" или почему хакеры так легко вас взламывают
- Почему я никому не рекомендую ставить BSD-дистрибутивы
- Минусы одной из самых популярных ОС Linux
На связи был ваш многоуважаемый красноглазик - Типичный Линуксоид
Обязательно отмечайте статью ❤ и напишите свои мысли в 💬!
До следующей статьи!