Как я могу ограничить использование оперативной памяти для конкретного пользователя или процесса?

8

Я использую фоновый сервис, который время от времени теряет память. Чтобы не использовать Alt+ SysRq REISUB[ 1 ], я бы хотел ограничить использование оперативной памяти для одного процесса или пользователя системы.

Я действительно хотел бы сказать: пользователь x может использовать максимальный объем оперативной памяти в 1 ГБ.

Это возможно? Нужна ли для этого какая-нибудь виртуальная машина? Я использую Ubuntu 9.10.

guerda
источник

Ответы:

10

ulimit твой друг. Проверьте флаг -m. Я думаю, что вы установили это до того, как запустите свой процесс, и с тех пор он применяется (в текущей оболочке).

basszero
источник
Спасибо, хороший совет! Как я понимаю, ulimit ограничивает потребление памяти всеми пользователями / процессами / какими бы то ни было. Мне просто нравится ограничивать его одним пользователем / процессом и подпроцессами.
Guerda
1
ulimit - это команда оболочки, которая влияет только на процессы, запущенные из той же оболочки после выполнения ulimit. Вы запускаете процесс в сценарии оболочки с помощью команды ulimit, чтобы он влиял только на этот процесс.
KeithB
4

В дополнение к командам оболочки ulimit(для bash) или limit(для csh) вы можете управлять этим изнутри вашего кода с помощью ulimit()функции.

KeithB
источник
1
Обязательные страницы управления: linux.die.net/man/1/ulimit (команда оболочки) и linux.die.net/man/3/ulimit (функция C).
Stephan202