После семи месяцев разработки опубликован (https://github.com/rfjakob/earlyoom/releases/tag/v1.3) выпуск фонового процесса earlyoom 1.3 (https://github.com/rfjakob/earlyoom), который периодически проверяет объем доступной памяти (MemAvailable, SwapFree) и пытается на ранней стадии отреагировать на возникновения нехватки памяти.
Если объём доступной памяти меньше заданного значения, то earlyoom принудительно (через отправку SIGTERM или SIGKILL) завершит работу процесса, наиболее активно потребляющего память (имеющего самое большое значение /proc/*/oom_score), не доводя состояние системы до очистки системных буферов и мешающего работе своппинга (обработчик OOM (Out Of Memory) в ядре срабатывает когда состояние нехватки памяти уже достигло критичных значений и обычно к этому моменту система уже не реагирует на действия пользователя).
Earlyoom поддерживает отправку уведомлений о принудительно завершённых процессах на рабочий стол (с помощью notify-send), а также предоставляет возможность определения правил, в которых при помощи регулярных выражений можно задать имена процессов, завершение которых предпочтительно (опция "--prefer") или остановки которых стоит избегать (опция "--avoid").
Основные изменения в новом выпуске:- Реализовано ожидание завершения процесса после отправки ему сигнала. Это устраняет проблему, заключающуюся в том, что earlyoom иногда убивает более одного процесса, когда одного будет достаточно;
- Добавлен вспомогательный скрипт (notify_all_users.py) для уведомления всех залогиненых пользователей о завершении процессов через notify-send;
- Исправлено некорректное отображение некоторых имён процессов, содержащих символы UTF-8;
- Принят кодекс поведения (Contributor Covenant Code of Conduct).
URL: https://github.com/rfjakob/earlyoom/releases/tag/v1.3
Новость: https://www.opennet.dev/opennews/art.shtml?num=50809
Напоминаю, что использование юзерспейсного обработчика нехватки памяти - это хорошая практика.Обзор основных демонов.
Earlyoom: simple, stable, tiny. VmRSS меньше мегабайта, нагрузка на процессор околонулевая. С релиза 1.3 стал очень надежен (исправлено возможное убийство невиновных). Лучший выбор для домохозяек, которым не нужны лишние настройки, а нужна хорошая работа из коробки. Рекомендовал бы его в качестве дефолтного обработчика нехватки памяти для колясок.
Nohang: явная и очень гибкая конфигурация. Десятки параметров настройки в конфиге. Подробная печать свойств завершаемого процесса. Печать таблицы процессов со свойствами всех процессов перед корректирующим действием. Возможность реакции на PSI (pressure stall information, https://lwn.net/Articles/759658/) с выбором произвольной метрики и сигруппы для мониторинга. Возможность кастомизации корректирующих действий: отправка жертве любого сигнала (помимо SIGTERM/SIGKILL) или выполнение произвольной команды. Возможность тонкого влияния на badness процесса путем сопоставления его name, cmdline, cgroup, exe realpath c заданным регулярным выражением. Уведомления о низком уровне памяти (произвольной командой или через notify-send). Минусы: мало документации; в данный момент не вполне стабилизирован: требует некоторой доработки и стабилизации.
oomd: многообещающий, но пока недоступен для домохозяек: https://github.com/facebookincubator/oomd/issues/61 (не смог заставить его работать; требует больших танцев). Заметно грузит проц.
Интересное сравнение.
Не понял только про oomd он грузит проц и при этом не работает?
Таки да. Он грузил проц, писал сообщение что вот сейчас кого-то убьет, но ничего не происходило.
Лучше пользователям хрома не ставить это..
Пользователь хромиума. Благдаря earlyoom гоняю кубунту 18.04 на 12.5-дюймовом безвентиляторном Xiaomi с 4ГБ ОЗУ. В арбочее время у меня запущены - хромиум, шлак, зум, несколько Konsole, Dolphin и может что-то ещё. Сейчас это основная рабочая машина, весит 1300г, хороша для путешествий. Хоть я и девляпс, но обхожусь без варганта, ибо пердукт нашей компании и в сотню гигабайт не влезает.
Пердукт, да
Таки да. Но пользуются им достаточно центровые и сильно примелькавшиеся шараги. Большую их часть ты даже знаешь.
Для юзеров хрома я изобрёл новый chromed. Как только процессы хромого обнаруживаются в системе, хромд немедленно их уничтожает, что делает вашу память мягкой и шелковистой.
С опцией -d можно так же удалить и замаскировать пакет хромого во избежание рецидивов.
>Как только процессы хромого обнаруживаются в системе, хромд немедленно их уничтожаетNohang можно так сконфигурировать, чтоб перниодически искал процессы хрома и убивал только их.
В чем смысл?
Нет бы другие программы оптимизировать, так нет, сделаем ещё одну. Это как бабы: "что бы такого съесть, чтобы похудеть?".Я думаю, эти наработки нужно было в ядре реализовать, в том же обработчике oom. А параметры или режимы работы прямо в параметрах загрузки указать. Типа, используем файл с настройками такой вот, или режим работы вот такой.
>Нет бы другие программы оптимизироватьЭта программа ничем не хуже других и выполняет полезную работу.
>Я думаю, эти наработки нужно было в ядре реализовать
Предлагаешь - действуй. Эти разговоры что "надо бы" идут десятки лет, а воз и ныне там. У меня нет времени ждать, пока ядерные хакеры сподобятся реализовать нужный функционал в ядре. Я просто пишу демон, которые решает задачу в юзерспейсе с максимальной гибкостью.
>используем файл с настройками такой вот
> Я думаю, эти наработки нужно было в ядре реализовать,А кому оно надо? Линукс - это Android, сервера, IoT. Там не нужно это.
Ты бы шёл лучше с понями играться.
> Линукс - это Android, сервера, IoT. Там не нужно это.а для тех у кого линукс на ноутбуках -- тоже это не нужно:
просто смысла нет ни какого -- пользоваться программами которые "почему-то" жрут памяти больше чем есть на ноутбуке.
вместо того чтобы устанавливать какой-то-нахрн-убивальщик -- проще удалить "бракованную" программу и установить вместо неё другую.
> Я думаю, эти наработки нужно было в ядре реализовать, в том же обработчике oom.Эти наработки можно *будет* реализовать в ядре, если из этого выйдет что-то достойное и достаточно простое. Но исследовать вопрос, что можно сделать и как это делать, лучше в userspace. Если тебе кажется, что они уже сделали что-то достойное перенесения в ядро, то инструменты разработки под ядро открыты, флаг тебе в руки.
Нет ведь просто оперативочки докупить. Надо какие-то оомкиллеры сидеть писать в поте лица. А так надел сандали, выбежал во двор, перешел дорогу, купил хлебушка и по пути с магазина домой прикупил на сдачу оперативочки.
Бывают ещё глюки, из-за которых прога очень резко съедает всё память, так что и дёрнутся не успеваешь, а потом сидишь долгими минутами и ждёшь, пока или самому удастся её прибить, или, наконец-то OOM догадается, что ОС уже какое-то время вообще не выполняет никаких полезных действий, а только так тихо сама с собою что-то делает.
Я не жду. Если есть признаки, что всё повисло намертво, то просто жмякаю резет.
В том то и дело, что тут не винда, а Линукс: по-настоящему намертво не повисает, а даже спустя 30-60 минут "подвисания намертво" всё вернётся как и было (не считая разорванных сетевых соединений по таймауту). Но столько ждать нерационально.
Домой пришел, тырк - а слотов свободных и нет, на прошлой неделе после обновления Chrome уже все забил, и того мало!
...не умеют минусаторы в сарказм, не умеют.
Много не купишь на зарплату 10-15 тысяч. рублей и на пенсию 8-14 тысячь. рублей. Отдают за комунальные услуги и на еду очень мало остаётся. Остальное идёт лесом. Массовое явление.
2010: первый в истории юзерспейсный киллер на перле
https://stackoverflow.com/questions/2125812/what-is-the-best...2014: появился earlyoom
2014: https://github.com/temoto/peacemaker, написан на golang: Kill processes that abuse system resources. Не получил развития, туп, прожорлив.
> 2010: первый в истории юзерспейсный киллер на перлеНе, не первый. Подобные вещи писали все, кому не лень. Писали на всём, на чём писалось. В основном на shell. И писали ещё в 90х-00х, инфа сотка.
> 2010: первый в истории юзерспейсный киллер на перлеАпач кстати доработали. Там есть параметры на лимиты, после которой грохает обработчик.
А для гуев и остального теперь есть cgroups =)
Любую проблему можно решить, если прибивать нужные процессы в нужное время в нужном порядке. Если вы не можете решить вашу проблему, убивая процессы, значит вы ещё не достигли должного уровня просветления и либо прибиваете не те процессы, либо прибиваете их в неправильное время, либо в неправильном порядке. Служителям секты свидетелей Киллеговы категорически запрещается пытаться осмыслить проблему с целью найти решение, которое не требует прибивания процессов. В случае обнаружения у служителя секты таких наклонностей он будет немедленно предан анафеме.
Хотелось бы ОТ ВСЕЙ ДУШИ поблагодарить разработчиков(-ка) и спросить его Яндекс.Кошелёк.rfjakob, я твой должник. Ты даже не представляешь от какого головняка ты меня спасаешь своей программулиной.
использую gocryptfs от того же разработчика - дальнейшее развитие encfs, которая не развивается
https://github.com/rfjakob/earlyoom/issues/133
Ваша заявка принята.
For Debian 10+ and Ubuntu 18.04+, there's a Debian package.
Для Debian9 нет пакета?
Нет. Ставьте через make (даже ести б был - был бы позапрошлой версии, это ж дебиан).
тогда уж лучше checkinstall - так хоть удалить можно будет.
Спасибо большое разработчикам!
В репах версия earlyoom 1.2-1. Когда ждать обновление?
Файл с настройками earlyoom https://github.com/hakavlad/nohang/blob/master/nohang.conf здесь?
Файл с настройками earlyoom: /etc/defaults/earlyoom
>Когда ждать обновление?Скорее всего никогда. Ставьте последнюю весию с гитхаба.
Fix:
Файл с настройками earlyoom:
/etc/defaults/earlyoom
cat: /etc/defaults/earlyoom: Нет такого файла или каталога
user@PC:~$ cat /etc/default/earlyoom
# Default settings for earlyoom. This file is sourced by /bin/sh from
# /etc/init.d/earlyoom or by systemd from earlyoom.service.# Options to pass to earlyoom
EARLYOOM_ARGS="-r 60"# Examples:
...
Однажды он у меня убил preload, было смешно.
А вообще огромное спасибо разработчикам, утилита работает отменно.
Самый лучший oom:/use/bin/say ‘Alexa! Order more RAM!’
$ /use/bin/say
bash: /use/bin/say: No such file or directoryВот потому и использую earlyoom
картинка в тему https://imgur.com/a/pu1H1TL
Всё лишь бы не редизайнить подсистему виртуальной памяти. Ведь это ЯДРО, там могут и средним пальцем показать в направлении параши.Ещё раз: запустил Qt Creator - всё встало намертво. Запустил firefox - тоже. Потому что криво всё реализовано и переделывать никто не будет - дешевле памятью залить до объёма, достаточного для запуски Win 10 в виртуалке вместе со всем жрущим софтом и запускать всё потенциально жрущее только там.
> запустил Qt Creator - всё встало намертво. Запустил firefox - тожеЕсли у вас памяти недостаточно что бы все библиотеки в ней держать, то при чём тут дизайн виртуальной памяти?
А в наше время усе летало на 128 мегабайтах памяти, и кеды и гномы и веб...