Обмеження пам'яті для процеса в Linux
Є один сервіс що регулярно з'їдає всю доступну пам'ять.
Запускається сервіс willnorris/imageproxy через supervisor
під користувачем imageproxy
:
[program:ImageProxy]
command=imageproxy
directory=/tmp
autostart=true
autorestart=true
user=imageproxy
process_name=ImageProxy
Для користувача imageproxy
в /etc/security/limits.conf
вказано обмеження пам'яті
imageproxy hard as 500000
Але це не працює, процеc регулярно споживає значно більше пам'яті ніж 500М
Також пробував запускати через prlimit
prlimit --rss=500000 imageproxy
Це також не допомагає.
Відповіді на питання (2)
Якось у мене була така проблема з qBittorrent, робив здається так:
[Service]
MemoryHigh=256M
MemoryMax=512M
MemorySwapMax=512M
Але це не вирішить проблему, просто програма буде "висіти" з обмеженням. Тре фіксити саму причину а не її наслідки.
Сервіс imageproxy
може ігнорувати обмеження пам'яті, які встановлені через /etc/security/limits.conf
. Це може бути пов'язано з тим, що supervisor
запускає сервіс як дочірній процес, і можливо, у нього встановлені власні обмеження пам'яті.
Щоб обмежити пам'ять для процесу imageproxy
, ви можете використовувати параметри командного рядка imageproxy
, які контролюють об'єм пам'яті, що може використовуватись. Наприклад, ви можете встановити обмеження пам'яті через флаг -memory
. Наприклад:
command=imageproxy -memory 500M
Це обмежить пам'ять процесу imageproxy
до 500М. Ви можете налаштувати відповідний розмір пам'яті в межах своїх потреб і обмежень.