Автор Тема: Earlyoom в Runtu  (Прочитано 2742 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ek-nfn

  • Местный
  • *****
  • Автор темы
  • Сообщений: 1422
Earlyoom в Runtu
« : Январь 09, 2020, 14:23:39 »
Пользователь, HsH как-то натолкнул на такую утилитку - Earlyoom, которая автоматом может отслеживать и экстренно завершать процесс, потребляющий больше всего памяти в системе. Очень нужная штука для любителей Рунту (как правило, ставящие ее на слабые машины). Избавляет от тормозов включения сброса данных в свап. Вот с ней бы поэкспериментировать. После чего ее можно будет включать в дистрибутивы Рунту.
Devuan ASCII x32..x64

Оффлайн Пользователь.

  • Местный
  • *****
  • Сообщений: 4494
Earlyoom в Runtu
« Ответ #1 : Январь 10, 2020, 11:53:19 »
Прочитал описание программы Earlyoom, очень узкоспециализированная программа, не подходит для всех случаев нехватки памяти.

Swap более универсален в этой ситуации, позволяет спокойно сохранить данные и закрыть программу или перезапустить.
А с SSD возможно даже получится работать в программах при использовании swap.

На слабых компьютерах не только нехватка памяти, там могут быть проблемы и с блоком питания, и с охлаждением, и с слабым процессором, со слабой видеокартой, с медленной сетью, с медленными усб портами.

Например у меня на нетбуке, если долго работать в нем, то перегревается процессор, и начинается тротлинг. Хотел поменять термопасту - разобрал, оказалось там термопрокладка, замены у меня нет. Вентилятор затягивает воздух под клавиатурой, а там щелей почти нет, не рискнул сверлить клавиатуру - там тонкая микросхема. Пока придумал временно оставлять нетбук в покое, и под батарею подкладывать толстую книгу - чтобы увеличить зазор между вентиляционной решеткой и поверхностью стола.

Лучше всего конечно перейти на внешнюю клавиатуру, а нетбучную убрать для улучшения вентиляции.

Можно уменьшить количество фоновых процессов, да и на нетбуке можно файловую систему попроще, чтобы процессор не нагружался.

Оффлайн ek-nfn

  • Местный
  • *****
  • Автор темы
  • Сообщений: 1422
Earlyoom в Runtu
« Ответ #2 : Январь 10, 2020, 13:03:12 »
Swap более универсален в этой ситуации, позволяет спокойно сохранить данные и закрыть программу или перезапустить.
Ты похоже не понял. Эта программа как раз и создана для того, чтобы не задействовался Swap, так как уж слишком тормозной процесс и частый для машин с ОЗУ 2-4 гб. Спокойно не получается, хочеться долбануть машину об пол. Проще своевременно закрыть тот же браузер (практика показывает, что именно он запускает процесс активного сброса в свап) и затем снова открыть, а уж он сам восстановит данные, но при этом существенно освободит ОЗУ. Да и офис восстановит свои данные при повторном запуске. И это будет намного быстрее, чем ожидание окончания работы через свап.
Я писал в свое время скрипт для контроля заполнения ОЗУ и при превышении порога вызывалась команда закрытия бразера, так как другие программы всегда вели себя нормально. А тут уже готовый демон, делающий что надо и закрывающий любую программу. Идеальный софт для слабой машинки. Только вот насколько корректно работает? Мне то сейчас это уже не надо, а так бы установил сам.
« Последнее редактирование: Январь 10, 2020, 13:12:13 от ek-nfn »
Devuan ASCII x32..x64

Оффлайн HsH

  • Administrator
  • *****
  • Сообщений: 3169
Re: Earlyoom в Runtu
« Ответ #3 : Январь 10, 2020, 15:30:37 »

    Я устанавливал Earlyoom на один из доступных ноутбуков с 4Гб ОЗУ. Тестировал с ограничением выделяемой памяти (параметр ядра "mem=xxxM") до 512 и 256Мб, как с обычным своп-разделом 2Гб, так и совместно с zswap. Какое-то явное изменение поведения системы зафиксировать не удалось, полагаю это связано с недостаточно полноценным и продолжительным наблюдением.

Возможно, у кого-то получится наблюдать более ощутимые и измеримые результаты.

Оффлайн smik55

  • Местный
  • *****
  • Сообщений: 1015
Re: Earlyoom в Runtu
« Ответ #4 : Январь 10, 2020, 20:43:06 »
Не знаю, как эта утилита позволит отказаться от Своп или как то на него влиять. Судя по описанию, она просто контролирует момент нехватки памяти и отключает процесс, занимающий больше всех памяти.
Цитировать
Обработчик OOM (Out Of Memory) в ядре срабатывает когда состояние нехватки памяти уже достигло критичных значений и обычно к этому моменту система уже не реагирует на действия пользователя.
 В качестве альтернативы OOM Killer разработан Early OOM Daemon (earlyoom).
Фоновый процесс earlyoom 1.1, который периодически (10 раз в секунду) проверяет объем доступной памяти (MemAvailable, SwapFree) и пытается на ранней стадии отреагировать на возникновения нехватки памяти.
Если объём доступной памяти меньше заданного значения, то earlyoom принудительно (через отправку SIGKILL) завершит работу процесса, наиболее активно потребляющего память (имеющего самое большое значение /proc/*/oom_score), не доводя состояние системы до очистки системных буферов и мешающего работе своппинга.
.
Я думаю, это для тех случаев, когда часто наблюдается полное зависание системы, когда спасает только ребут. Такое наблюдалось например у меня на ОС 18.04х64, которая больше всего занимает памяти из моих 2 ГБ ОЗУ и 3ГБ Своп, который толком и не задействовался даже на половину, в основном при активном использовании тяжелого браузера одновременно с другими программами.
Установил тоже earlyoom и libnotify-bin» на сбору 20.04 МАТЕ.
Изменил так же значение vm.swappiness=20, хотя так и не пришел к однозначному выводу в пользе этого.
=

Оффлайн ek-nfn

  • Местный
  • *****
  • Автор темы
  • Сообщений: 1422
Re: Earlyoom в Runtu
« Ответ #5 : Январь 10, 2020, 23:14:38 »
Изменил так же значение vm.swappiness=20, хотя так и не пришел к однозначному выводу в пользе этого.
когда-то я это все испробовал. Сделал такой вывод - чем меньше vm.swappiness, тем позднее, но жеще включается swap. После этих экспериментов больше не трогаю этот параметр. он вроде по умолчанию 60, что означает ранний, постепенный, но незаметный для пользователя сброс неиспользуемых данных в swap. так мягче работает, так как позднее наступает момент активного сброса в swap, который подвешивает машину. Ну и сам этот активный процесс, на мой взгляд, мягче и короче, так как куча ненужного давно уже в свапе.
При правильной настройке Earlyoom (выставление правильных порогов), как понимаю, можно вообще избежать жесткий сброс в свап при заполнении памяти. Обычно, этот процесс сброса в свап начинается при открытии пары тяжелых страниц в браузере, которые моментально заполняют остаток ОЗУ. Вручную это не отследить, не успеваешь закрыть лишнее, все заканчивается за 10-20 секунд. После чего машина надолго подвисает. А автоматика может быстро убить такой процесс и до сброса в свап не доходит. Я выше писал, что делал такой скрипт, который опрашивал объем свободного ОЗУ каждые 1-5 секунд (как выставишь) и при заполнении 3,5 гб (память была на 4 гб) делал killall браузер. Если порог ставить выше 3,5, то и этот скрипт не успевал убить процесс и включался свап. Был еще и предварительный порог на 3...3,2 гб, по которому выскакивало сообщение, что неплохо бы закрыть некоторые вкладки. Для браузеров есть расширения, которые показывают (на табе) какая вкладка сколько потребляет ресурсов. Вот быстренько и закрываешь те, что жрут много. Ну а если прозевал сообщение, то скрипт по второму порогу гасит весь браузер.
« Последнее редактирование: Январь 10, 2020, 23:19:16 от ek-nfn »
Devuan ASCII x32..x64

Оффлайн Пользователь.

  • Местный
  • *****
  • Сообщений: 4494
Re: Earlyoom в Runtu
« Ответ #6 : Январь 11, 2020, 00:05:19 »
Лимит вкладок удобнее, чем внезапное завершение работы браузера.


Оффлайн ek-nfn

  • Местный
  • *****
  • Автор темы
  • Сообщений: 1422
Re: Earlyoom в Runtu
« Ответ #7 : Январь 11, 2020, 00:25:55 »
Лимит вкладок удобнее, чем внезапное завершение работы браузера.

Там еще есть такой вариант, как освобождение памяти от давно не просматриваемых вкладок. Я все это использовал в те времена. Но это не спасает при открытии тяжелых вкладок, которые разом могут съесть по гигабайту, причем очень быстро при шустром инете. Тут уже единственный вариант - срочно закрывать либо вкладку, если  контролируешь потребляемые ею ресурсы, либо позволить автоматике захлопнуть браузер.
Devuan ASCII x32..x64

Оффлайн Пользователь.

  • Местный
  • *****
  • Сообщений: 4494
Re: Earlyoom в Runtu
« Ответ #8 : Январь 11, 2020, 10:22:36 »
Освобождение памяти от давно не просматриваемых вкладок (browser.tabs.unloadOnLowMemory) не работает в Linux, в интернете написано что это только для Windows. Испробовал, информация подтвердилась, Firefox никак не реагирует на эту функцию.

Зато в нем прекрасно работают функции ограничения хранения закрытых вкладок и ограничение хранения переходов по сайту. Еще бы отключить предварительную загрузку страниц при наведении на ссылку.

Оффлайн ek-nfn

  • Местный
  • *****
  • Автор темы
  • Сообщений: 1422
Re: Earlyoom в Runtu
« Ответ #9 : Январь 11, 2020, 11:48:26 »
Освобождение памяти от давно не просматриваемых вкладок (browser.tabs.unloadOnLowMemory) не работает в Linux,
Работает, проверял. Только не помню на каком браузере и какое было расширение. Даже если и для Firefox, то для старого движка. В нем много что работало нормально в отличие от этого движка.
Кстати, по поводу защиты памяти от быстрого переполнения. Firefox - единственный браузер, который позволял мне на 4-х гб ОЗУ открывать 100-200 вкладок без переполнения ОЗУ. Это когда я работал со своим фотоальбомом, расположенным в облаке. Естественно, с одним процессом. Машина спокойно продолжала работать и с другими запущенными приложениями. Все хромиумы без исключения загоняли машину в аут уже при 30-50 вкладках. Вот по этой причине я и сегодня больше не использую хромиумы, хотя памяти уже хватает и для них. Мне нравится система разных профилей от Firefox, очень удобная шука, позволяющая работать нескольким экземплярам Firefox с разными настройками, количеством процессов, расширениями и вкладками. Хромиумы в таком режиме сразу съедят всю память.
Devuan ASCII x32..x64

Оффлайн Пользователь.

  • Местный
  • *****
  • Сообщений: 4494
Re: Earlyoom в Runtu
« Ответ #10 : Январь 11, 2020, 15:31:54 »
На счет Swap, это не оперативная память, прикладные программы не могут напрямую загружать туда и считывать данные, операционная система при нехватке памяти переносит несколько страниц оперативной памяти в свап, когда эти страницы снова понадобятся, то из памяти переносятся другие страницы в свап и нужные возвращаются в оперативную память.

Так что использование свапа всегда замедляет работу программ, он был актуален когда свап был маленький.
Если свап заполняется на пару сотен мегабайт - вот это нормально, а когда на гигабайт с лишним - это уже будет подтормаживание компьютера.

Следовательно нужен перезапуск ресурсоемких процессов когда заполнен свап на 500 мегабайт, совсем запрещать использовать свап не нужно.

Но как быть со спящим режимом в этом случае - неизвестно.

Давайте не будем создавать себе проблем, использование свапа означает что пора апгрейдить или менять компьютер.
Отсрочить это событие можно настройками системы и программ.
« Последнее редактирование: Январь 11, 2020, 15:36:35 от Пользователь. »

Оффлайн ek-nfn

  • Местный
  • *****
  • Автор темы
  • Сообщений: 1422
Re: Earlyoom в Runtu
« Ответ #11 : Январь 11, 2020, 17:47:31 »
Следовательно нужен перезапуск ресурсоемких процессов когда заполнен свап на 500 мегабайт, совсем запрещать использовать свап не нужно.

свап - это просто файл на диске. Earlyoom не запрещает свап, просто не дает развиваться ситуации обвального переноса данных в свап (это происходит при резком увеличении потребления озу в моменты, когда свободной памяти почти не остается. Процесс тяжелый, на слабой машине это тормоза на несколько минут. Поэтому лучше не допускать этого момента, чем пережидать его.
И второе, при малом объеме озу опасно выделять под свап мало памяти, надо раза в два больше. Иначе, если вдруг при переносе в свап в нем закончится свободное место, то машина тупо виснет и перезапускается только выключением питания.
Devuan ASCII x32..x64

Оффлайн Stiven

  • Новичок
  • **
  • Сообщений: 48
Re: Earlyoom в Runtu
« Ответ #12 : Январь 11, 2020, 21:22:06 »
... Еще бы отключить предварительную загрузку страниц при наведении на ссылку.

Запрет предварительной загрузки страницы, которую Firefox считает логически последующей:
network.prefetch-next=false
« Последнее редактирование: Январь 11, 2020, 21:31:36 от Stiven »

Оффлайн ek-nfn

  • Местный
  • *****
  • Автор темы
  • Сообщений: 1422
Re: Earlyoom в Runtu
« Ответ #13 : Март 05, 2020, 06:51:08 »
Earlyoom внесен в репозитарий debian-10 stable, значит должно присутствовать и в основной репе убунту 18.04. В крайнем случае можно скачать нужный  deb пакет для amd64 или i386.

Кратенько о принципе работы данной нужной штуки - Когда свободной памяти останется 10%, Earlyoom будет посылать сигнал SIGTERM наиболее жручим процессам, завершая их. Когда памяти останется 5% - демон будет посылать сигнал SIGKILL, принудительно завершая процесс.

Как понимаю, свап уже не нужен, если не предусмотрено засыпание системы. До тормозного процесса сброса в свап уже не доходит, так как все активно жрущее память принудительно закрывается в последний момент.
Devuan ASCII x32..x64

Оффлайн smik55

  • Местный
  • *****
  • Сообщений: 1015
Re: Earlyoom в Runtu
« Ответ #14 : Сентябрь 19, 2020, 17:42:37 »
earlyoom 1-0.1  есть в Синаптике , установил для проверки.
Early OOM Daemon

Earlyoom это пользовательское пространство OOM-убийца, который может избежать системы, чтобы попасть в
состояние невосприимчивости, вызванное заменой, которое, скорее всего, произойдет, когда
большая замена присутствует, а память плотная. Он проверяет количество доступных
память и периодически меняйте местами, и когда оба значения ниже предварительно заданного значения,
это убивает самый большой процесс.
--
Ну я пользуюсь Slimjet, который сам не загружает не активные вкладки и выгружает простаивающие. ФФокс так не умеет и его давно не использую из-за прожорливости.