LINUX.ORG.RU

Лимиты на десктопе для предотвращения зависаний

 ,


2

6

Вопрос фанатам лимитов: как вы решите ситуацию, когда, например, на десктопе я пользуюсь прогами app1, app2, app3. И каждый раз они могут выжирать разное кол-во памяти. И могут запускаться сразу все. А могут по одной. При этом я хочу достичь полной утилизации памяти, при этом надежно предотвращать зависания.

praseodim aidaho WitcherGeralt intelfx

★★★

Последнее исправление: hakavlad (всего исправлений: 1)

Рекомендую thrash-protect. Он временно замораживает процессы, у которых резко растет потребление памяти. Только не злоупотребляй, а то начнет морозить все подряд и станет еще хуже.

MicrosoftLinux
()
Ответ на: комментарий от WitcherGeralt

Многие программы не потребляют предсказуемое количество памяти. В зависимости от входных данных и прочих внешних факторов могут мегабайт съесть, а могут и несколько гигов внезапно затребовать и тут же заполнить. Не ССЗБ не пользуются такими программами, что ли? А чем тогда вообще пользоваться, выкинуть компьютер и пользоваться калькулятором?

MicrosoftLinux
()
Ответ на: комментарий от WitcherGeralt

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

MicrosoftLinux
()
Ответ на: комментарий от WitcherGeralt

И кстати, нередко бывают случаи, когда докупать оперативку бессмысленно: просто в программе глюк, или сами входные данные кривые, и программа начинает потреблять бесконечное количество памяти.

MicrosoftLinux
()
Ответ на: комментарий от MicrosoftLinux

По этому поводу я тоже уже высказался.

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

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Ядерный киллер может не ту программу прибить, это плохо. thrash-protect более мягкий, он даёт юзеру время посмотреть, в чем дело, и разрулить ситуацию вручную. Лимиты, опять-таки, предсказывать сложно; например, сегодня пользователю понадобилось 20 вкладок в хроме, а завтра 10 вкладок в хроме и какой-нибудь SQLdeveloper. Предлагаете иметь оперативки по сумме максимального объема памяти, который позволено потребить каждой установленной программе по отдельности, даже если они обычно вместе не запускаются?

MicrosoftLinux
()
Ответ на: комментарий от WitcherGeralt

Самый популярный (или второй, не помню) серверный дистрибутив - убунта, где твой мир? А ещё туда всякие ISPmanager, VestaCP и прочее дерьмо ставят, чтобы мышевозы могли «админить». Куда там маленькому скрипту на питоне по говнистости по сравнению с этим?

MicrosoftLinux
()
Ответ на: комментарий от MicrosoftLinux

либо поставь общий лимит для всего, что запускаешь

потребить каждой установленной программе по отдельности, даже если они обычно вместе не запускаются?

Дислексия?

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Или же просто не включай своп, тогда ядерный киллер сам порешает

Неправда, вешается система нахрен.

anonymous
()
Ответ на: комментарий от anonymous

По моей практике вешается, но не намертво и не надолго.

Вообще, я наоборот юзаю своп. Но на быстрых SSD, так что если его не засрать целиком, система продолжит ворочаться. Впрочем, я на десктопе свопался раза два за всё время.

WitcherGeralt ★★
()
Ответ на: комментарий от anonymous

То на orange pie zero было, я ей кота распознавал. Нахерачил не приходя в сознание, лишь бы работало, ну оно и текло. Судя по логу, там при переполнении от десятков миллисекунд до нескольких секунд проходило до убийства сервиса.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Так в результате грохнется первая программа, которая попытается выделить память сверх лимита. Ничем не лучше OOM. У него хоть какой-то скоринг есть.

MicrosoftLinux
()
Ответ на: комментарий от WitcherGeralt

Вполне, если задачи и набор программ, либо данных, постоянно меняются. Даже банальная нагрузка на сервере: сегодня 8 ГБ оперативки хватило, завтра налетело по слешдот-эффекту посетителей и даже этого мало, но в норме такого не предвидится. Значит ли это, что надо держать кучу избыточной оперативки? Облака с гибким горизонтальным масштабированием не просто так появились.

MicrosoftLinux
()
Ответ на: комментарий от WitcherGeralt

Сервер должен выдержать нагрузку и обслужить хотя бы часть пользователей, а не встать раком совсем. Прибивание воркеров OOM-ом этому явно не способствует, поскольку будет прерывать загрузку у пользователей, направленных на этот воркер.

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

MicrosoftLinux
()
Ответ на: комментарий от MicrosoftLinux

Вообще, если это колхоз, то пофигу, пусть встаёт раком, лишь бы более-менее аккуратно помер и перезапустился. Но в идеале просто иметь load balancer, который не даст серверу прихереть с нагрузки. Если уже сам балансер не осилит, то можно просто делать отлуп.

Ну, ок. Я уж было подумал, ты и на сервере хочешь киллеров пускать.

WitcherGeralt ★★
()
Ответ на: комментарий от anonymous

Нет. Да и фейсбук напрямую этого не требует

Мне кажется, что дока по цгруппам от ядра имеет приоритет над записками фейсбука.

Вообще я сначала подумал, что дело может быть в том, что systemd может автоматически выставлять memory.min на всех родительских цгруппах. Но я проверил — это не так.

Можешь рассказать, как ты воспроизводишь нехватку памяти? Я поэкспериментирую.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

дока по цгруппам от ядра

он как раз в ФБ и работает:

================
Control Group v2
================

:Date: October, 2015
:Author: Tejun Heo <tj@kernel.org>

Tejun has been working on the Linux kernel for over 15 years across various subsystems from device drivers to core infrastructures. Since 2011, he has been maintaining cgroup, the Linux kernel resource control subsystem, and, for the past five years, working on cgroup2 to solve the previous version's fundamental shortcomings. Tejun currently leads resource control efforts at Facebook.

- https://www.youtube.com/watch?v=LVU0W5yL30I

anonymous
()
Ответ на: комментарий от MicrosoftLinux

Только не злоупотребляй, а то начнет морозить все подряд и станет еще хуже.

У меня так и было - он морозил всё подряд. thrash-protect очень сырой, не имеет удобного конфига, нет инфы о тонкостях конфигурации. Но идея интересная - посылать SIGSTOP самому быстрорастущему вместо SIGKILL самому толстому. Возможно, это и есть правильное поведение при высоком давлении памяти - останавливать растущий процесс вместо убийства самого большого чтобы уменьшить давление памяти (PSI).

anonymous
()
Ответ на: комментарий от anonymous

Окей. Потестил. Действительно не работает. Либо это какой-то адский баг (который никто не заметил, втф), либо мы что-то делаем не так.

intelfx ★★★★★
()
Ответ на: комментарий от anonymous

Не, не такой:

решение с cgroups достаточно очевидное, следует вычесть из общего объёма оперативы 3-4гб под систему (чтобы с запасом, никакой «полной утилизации»), а всё остальное отдать группе в которой будут находиться запускаемые тобой приложения

WitcherGeralt ★★
()
Ответ на: комментарий от intelfx

юзерские программы сейчас всегда лежат в одной цгруппе с графическим сервером/WM/DE

у меня в deb 9 Xorg лежит в /system.slice/lightdm.service

hakavlad ★★★
() автор топика
Ответ на: комментарий от hakavlad

Могут завесить всю систему же, приходится оставлять запаc.

anonymous
()
Ответ на: комментарий от MicrosoftLinux

Ядерный киллер может не ту программу прибить

В системд юнитах есть опция OOMScoreAdjust=

hakavlad ★★★
() автор топика
Ответ на: комментарий от hakavlad

Какие тесты провел?

systemd-run tail /dev/zero :)

Выставлял ли memory.min для родительской группы?

Да, пробовал выставлять memory.min и memory.low по цепочке и без — ноль эмоций.

intelfx ★★★★★
()
Ответ на: комментарий от WitcherGeralt

плох тот убогий говнокостыльный способ

Таки что в нем плохого? Эти костыли лечат сломанное ядро, и делают это хорошо.

hakavlad ★★★
() автор топика
Ответ на: комментарий от hakavlad

Это означает, что у тебя X-сервер запущен от рута вне PAM-сессии. Это уже давно устаревшая конфигурация. На современных системах экземпляры X-сервера (и тем более Wayland-композиторы) запускаются от имени пользователя и естественным образом попадают в цгруппу сессии.

intelfx ★★★★★
()
Ответ на: комментарий от hakavlad

Почему бы и нет? Через опцию загрузки включение сигруп2 поддерживается.

И что дальше? Результат где?

anonymous
()
Ответ на: комментарий от anonymous

Результат таков: могу использовать доступные только в cgroup2 лимиты, например MemorySwapMax.

MemorySwapMax=bytes

    Specify the absolute limit on swap usage of the executed processes in this unit.

    Takes a swap size in bytes. If the value is suffixed with K, M, G or T, the specified swap size is parsed as Kilobytes, Megabytes, Gigabytes, or Terabytes (with the base 1024), respectively. If assigned the special value "infinity", no swap limit is applied. This controls the "memory.swap.max" control group attribute. For details about this control group attribute, see cgroup-v2.txt.

    This setting is supported only if the unified control group hierarchy is used and disables MemoryLimit=.
hakavlad ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.