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

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

Update

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

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

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

<p> Но я думал, что применил ограничения к оболочке и все процессы, запущенные с /из нее с помощью <code>---- +: = 5 =: + ----</code>? Что я ошибся? Как сделать терминал и все подпроцессы, которые он запускает, будут ограничены использованием плунжера? </p></body></html>

33 голоса | спросил myWallJSON 16 MarpmFri, 16 Mar 2012 16:54:16 +04002012-03-16T16:54:16+04:0004 2012, 16:54:16

2 ответа


53

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

/etc/security/limits.conf

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

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

luser  hard  as   4000000

UPDATE - CGroups

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

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

В /etc/cgconfig.conf:

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

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

В /etc/cgrules.conf:

luser   memory   memlimit/

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

ответил utopiabound 16 MarpmFri, 16 Mar 2012 17:09:29 +04002012-03-16T17:09:29+04:0005 2012, 17:09:29
3

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

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

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

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

ответил jlliagre 17 MaramSat, 17 Mar 2012 04:52:59 +04002012-03-17T04:52:59+04:0004 2012, 04:52:59

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132