Ядро Linux не может мягко обрабатывать ситуации с нехваткой памяти. Как побороть?

>более 95% (да, наверное, и более) юзеров при нормальной работе вообще не испытывают проблем с нехваткой ОЗУ.

Разумеется это не так. В 2020 продолжают выпускаться ноутбуки с 4 гиг озу. Пара электрон приложений - и все, привет своппинг и тормоза.
>решил вопрос кардинально, существенно нарастив ОЗУ

Самое смешное, что это не всегда является решением. Были жалобы от юзеров с 32 гига памяти. что при исчерепании этой самой памяти машина виснет. Как раз таки с началом своппинга и виснет. А 32 гига исчерпать легко, если возникает быстрый цикл утечки где-либо.

"I have a problem that my system freezes completely when it runs out of memory. When this happens there is nothing to do than holding down the power button. The magic SysRq 2 doesn't work either. This is as described here at the forum (see links at the bottom).

My problem is that the program Shotcut 2 consumes loads of memory, which in return crashes everything, despite having 32 GB of memory on the system." - https://archived.forum.manjaro.org/t/solved-display-warning-message-or-kill-program-before-system-runs-out-of-memory/147635
>Или в кедах падает kwin, тогда приходится alt+ctrl+f2

Хорошая практика - защищать процессы, убийство которых приводит к смерти всех процессов сессии. Вот конфиг earlyoom, используемый в Федоре:

EARLYOOM_ARGS="-r 0 -m 4 -M 409600 --prefer '^Web Content$' --avoid '^(dnf|packagekitd|gnome-shell|gnome-session-c|gnome-session-b|lightdm|sddm|sddm-helper|gdm|gdm-wayland-ses|gdm-session-wor|gdm-x-session|Xorg|Xwayland|systemd|systemd-logind|dbus-daemon|dbus-broker|cinnamon|cinnamon-sessio|kwin_x11|kwin_wayland|plasmashell|ksmserver|plasma_session|startplasma-way|xfce4-session|mate-session|marco|lxqt-session|openbox)$'"
vasek
vall, попробуй отключи swap, почувствуешь разницу в отзывчивости … если swap имеется, то тормоза будут всеравно.
У меня дефолтный конфиг earlyoom и vm.swappiness

PS - …
vall
EARLYOOM_ARGS="-m 15 -s 85 -r 60 -n –avoid '(^|/)(init|systemd|Xorg|sshd)$' –prefer '(^|/)(telegram-desktop)$'"
у меня
EARLYOOM_ARGS="-r 3600 -n --avoid '(^|/)(init|systemd|Xorg|sshd)$'"

если swap имеется, то тормоза будут всеравно.

Нет. Как раз таки zram, prelockd и memavaild помогают не иметь лагов при интенсивном своппинге, или сильно уменьшить их. Демо:

while true; do (tail /dev/zero &); done
https://www.youtube.com/watch?v=X1wsgWOE-Tk - цикл, быстро рождающий быстрых пожирателей памяти, гуй жив.

`tail /dev/zero`, swap on HDD, memavaild, no freezes
- https://www.youtube.com/watch?v=DsXEWvq60Rw

supertux + 12 tail /dev/zero
- https://www.youtube.com/watch?v=QquulJ06dAo

playing superux + compiling Linux 5.4 with make -j512, MemTotal=9.6G, swap om zram
- https://www.youtube.com/watch?v=nSCT_zZHYYQ - заикается сильно, но гуй жив
indeviral
prelockd, а это на мой взгляд скептический взгляд выглядит смешно, скрипт на pythone который должен бороться с нехваткой памяти… а интерпретатор его сумеет дёрнуть при нехватке памяти?)
Зачем дёргать? Память блокируется на старте демона. Это ж не юзерспейсный киллер, котрый должен успеть среагировать за доли секунды. prelockd спешить некуда. А память memavaild, earlyoom, nohang защищена через mlockall().
hakavlad
защищаем процессы не от убийства оом киллероом. Мы запрещаем выгрузку кэша библиотек при нехватке памяти.
hakavlad
Нас интересует отзывчивый рабочий стол. Зачем блокировать процессы сборки?
наверно тогда я неправильно понял( ваш чудо программ, не ограничивает свободу oom, а удерживает кэш софта в свапе который вы запихнули в озу? Но тогда вообще ничего непнятна
hakavlad
баш тут причем?
@CRITICAL_NAME_LIST bash
hakavlad
Память блокируется на старте демона
так а разве демон питона это не скрипт в скрипте? Он там и отличается от while true, только наличием обработки вызовов, и по сути скрипт демона будет висеть в озу, но что запустить код программы(скрипта) по сути ему надо будет освободить память под неё, а может я не прав и это всё полёт больной фантазии...
Ошибки в тексте-неповторимый стиль автора©
Никогда не знаешь, во что выльется обсуждение. Ведь довольно живо тема себя показала шесть лет назад.

А сегодня почему-то вопрос особого энтузиазма не вызывает, к сожалению. Тем более, что есть возможность обсудить тему с автором решений. Которые уже включены в пакеты Fedora.
vall
шесть лет назад
потому что трава была 12309 да и в целом, а счас зеленее)
Ошибки в тексте-неповторимый стиль автора©
)))
vall
А сегодня почему-то вопрос особого энтузиазма не вызывает, к сожалению.
Дело не в энтузиазме, а в том, что данная тема потеряла актуальность.
Раньше у большинства не было такого количества ОЗУ, как сейчас - приходилось использовать альтернативные аналоги, например, zram, основное назначение которого и заключалось в виртуальном добавлении ОЗУ … про swap, zswap и не говорю.
Сейчас этой памяти у большинства стоит столько, сколько ему требуется для его задач … и это самое лучшее решение. Конечно, редко, но бывает при определенного вида работ случается нехватка памяти, но каждый решает эту проблему по своему, в зависимости от частоты таких случаев, важности решаемых задач и др. Кто то увеличивает объем ОЗУ, кто то просто смотрит за системой и не допускает критической ситуации, кто применяет имеющиеся для этого разные способы, что ему нравится и больше подходит, а большинство это вообще не волнует.
Лично у меня случаи не хватки памяти (при установленных 6G) довольно редки, а если и случаются, то только при определенного вида работ и для этого, чтобы исключить тормоза и не думать об этом, лучшее решение использование earlyoom - убиваются приложения, которые меня особо и не волнуют (они однотипны и их много) … а так как не использую и спящий режим (считаю это лишним и не нужным), то мне не нужен и swap раздел (раздел то имеется, но swap отключен).
И, как видим, проблема и в самом деле не актуальна и большую часть юзеров абсолютно не волнует.
Ошибки не исчезают с опытом - они просто умнеют
 
Зарегистрироваться или войдите чтобы оставить сообщение.