Небольшой трюк, ограничение памяти для отдельного приложения.

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
slant
Сообщения: 4506
Зарегистрирован: 21 июн 2017, 18:09
Решено: 99
Благодарил (а): 51 раз
Поблагодарили: 1993 раза
Контактная информация:

Небольшой трюк, ограничение памяти для отдельного приложения.

#1

01 дек 2022, 18:31

Допустим, у вас есть программа которая любит ЖРАТЬ память. Причем сколько не дай - все свободное сожрет. Но это не настоящая утечка, а именно любовь захапать под себя свободные ресурсы.
Такое поведение может сильно мешать, когда эта программа не единственная на машине. Или вы не видите смысла давать ей столько памяти - все равно лучше не работает. :) Как отучить? Вообще, для этого в линукс служат crgoups. Но чтобы их эффективно использовать самостоятельно - нужно курить документацию, ибо не все там просто и очевидно, а главное - многое взаимосвязано.

Однако! Если у вас дистрибутив на systemd, особенно из боле-менее свежих, то для простого запуска с ограничением памяти для единственной программы ничего долго и нудно курить не надо. Можно просто сделать так:

systemd-run --scope -p MemoryMax=2G --user my_limited_program

Здесь --user нужен для того, чтобы запускалось от обычного пользователя (вас), т.к. по умолчанию будет от root, с запросом пароля. Вообще systemd-run умеет еще много всякого интересного, но это уже тема для другого разговора.

А здесь он просто сконфигурирует для нас cgroup для запуска программы. В примере выше - ей будет доступно не более 2GB памяти. Если не уложится - вылетит с ошибкой о недостатке памяти. Но большинство нормальных программ на современных языках программирования в такой ситуации сначала будут запускать свои сборщики мусора, скидывать буфферы, и т.д. В общем - начнут себя вести как приличный жилец коммунальной жилплощади. :)

Аватара пользователя

Автор темы
slant
Сообщения: 4506
Зарегистрирован: 21 июн 2017, 18:09
Решено: 99
Благодарил (а): 51 раз
Поблагодарили: 1993 раза
Контактная информация:

Небольшой трюк, ограничение памяти для отдельного приложения.

#2

01 дек 2022, 19:40

UPD:
Если оно просто "не работает" (память жрет) но ошибок не выкидывает - скорее всего не активны cgroupsv2. Тогда надо убрать ключ --user. Да, так оно будет просить пароль, но работать будет все равно из под юзера - я там в посте выше неправильно написал.

Ответить

Вернуться в «Системные утилиты»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя