Небольшой трюк, ограничение памяти для отдельного приложения.
Добавлено: 01 дек 2022, 18:31
Допустим, у вас есть программа которая любит ЖРАТЬ память. Причем сколько не дай - все свободное сожрет. Но это не настоящая утечка, а именно любовь захапать под себя свободные ресурсы.
Такое поведение может сильно мешать, когда эта программа не единственная на машине. Или вы не видите смысла давать ей столько памяти - все равно лучше не работает.
Как отучить? Вообще, для этого в линукс служат crgoups. Но чтобы их эффективно использовать самостоятельно - нужно курить документацию, ибо не все там просто и очевидно, а главное - многое взаимосвязано.
Однако! Если у вас дистрибутив на systemd, особенно из боле-менее свежих, то для простого запуска с ограничением памяти для единственной программы ничего долго и нудно курить не надо. Можно просто сделать так:
Здесь --user нужен для того, чтобы запускалось от обычного пользователя (вас), т.к. по умолчанию будет от root, с запросом пароля. Вообще systemd-run умеет еще много всякого интересного, но это уже тема для другого разговора.
А здесь он просто сконфигурирует для нас cgroup для запуска программы. В примере выше - ей будет доступно не более 2GB памяти. Если не уложится - вылетит с ошибкой о недостатке памяти. Но большинство нормальных программ на современных языках программирования в такой ситуации сначала будут запускать свои сборщики мусора, скидывать буфферы, и т.д. В общем - начнут себя вести как приличный жилец коммунальной жилплощади.
Такое поведение может сильно мешать, когда эта программа не единственная на машине. Или вы не видите смысла давать ей столько памяти - все равно лучше не работает.

Однако! Если у вас дистрибутив на systemd, особенно из боле-менее свежих, то для простого запуска с ограничением памяти для единственной программы ничего долго и нудно курить не надо. Можно просто сделать так:
systemd-run --scope -p MemoryMax=2G --user my_limited_program
Здесь --user нужен для того, чтобы запускалось от обычного пользователя (вас), т.к. по умолчанию будет от root, с запросом пароля. Вообще systemd-run умеет еще много всякого интересного, но это уже тема для другого разговора.
А здесь он просто сконфигурирует для нас cgroup для запуска программы. В примере выше - ей будет доступно не более 2GB памяти. Если не уложится - вылетит с ошибкой о недостатке памяти. Но большинство нормальных программ на современных языках программирования в такой ситуации сначала будут запускать свои сборщики мусора, скидывать буфферы, и т.д. В общем - начнут себя вести как приличный жилец коммунальной жилплощади.
