Как создать пользователя с ограниченным использованием ОЗУ?

Поэтому у меня есть 4 ГБ ОЗУ + 4 ГБ. Я хочу создать пользователя с ограниченным разворотом и свопом: 3 ГБ оперативной памяти и 1 ГБ свопа. Возможно ли это? Можно ли запускать приложения с ограниченной оперативной памятью и свопами, доступными для них, без создания отдельного пользователя (а не для установки каких-либо специальных приложений, имеющих только конфигурацию сервера Debian / CentOS по умолчанию, а не использование sudo)?

Обновить:

Поэтому я открыл terminall и набрал в него команду ulimit -v 1000000 : ulimit -v 1000000 которая должна быть как 976,6Mb ограничения. Затем я вызвал ulimit -a и увидел, что ограничение «включено». Затем я начал использовать некоторый скрипт bash, который компилирует и запускает мое приложение в nohup , длинном nohup ./cloud-updater-linux.sh >& /dev/null & … но через некоторое время я увидел:

введите описание изображения здесь

(что было бы неплохо, если бы никаких ограничений не было применено – он загрузил некоторую большую библиотеку lib и начал ее компилировать).

Но я думал, что применил ограничения к оболочке и все процессы, запущенные с / из нее с помощью ulimit -v 1000000 ? Что я ошибся? Как сделать терминал и все подпроцессы, которые он запускает, будут ограничены использованием ram?

2 Solutions collect form web for “Как создать пользователя с ограниченным использованием ОЗУ?”

для этого делается ulimit . Вы можете настроить значения по умолчанию для ulimit для каждого пользователя или для каждой группы в

 /etc/security/limits.conf 

ulimit -v KBYTES устанавливает максимальный размер виртуальной памяти. Я не думаю, что вы можете дать максимальную сумму свопа. Это всего лишь ограничение на количество виртуальной памяти, которое пользователь может использовать.

Таким образом, у вас limits.conf будет строка (до 4 4G памяти)

 luser hard as 4000000 

ОБНОВЛЕНИЕ – CGroups

Пределы, налагаемые ulimit и limits.conf на каждый процесс. Я определенно не был ясен по этому вопросу.

Если вы хотите ограничить общий объем памяти, которую использует пользователь (это то, что вы просили). Вы хотите использовать группы.

В /etc/cgconfig.conf :

 group memlimit { memory { memory.limit_in_bytes = 4294967296; } } 

Это создает группу с максимальным пределом памяти 4GiB.

В /etc/cgrules.conf :

 luser memory memlimit/ 

Это вызовет запуск всех процессов, выполняемых luser внутри cgconfig.conf созданных в cgconfig.conf .

Вы не можете ограничить использование памяти на уровне пользователя, ulimit может это сделать, но для одного процесса.

Даже при использовании на пользовательских лимитах в /etc/security/limits.conf пользователь может использовать всю память, запуская несколько процессов.

Если вы действительно хотите ограничить ресурсы, вам нужно использовать инструмент управления ресурсами, например rcapd, используемый проектами и зонами в Solaris.

Есть что-то похожее на аналогичные функции в Linux, которые вы можете исследовать: cgroups .

Linux и Unix - лучшая ОС в мире.