ulimit
сделан для этого. Можно установить значения по умолчанию для ulimit
на на пользователя или на основание группы в
/etc/security/limits.conf
ulimit -v KBYTES
размер максимальной виртуальной памяти наборов. Я не думаю, что можно дать макс. объем подкачки. Это - просто предел на объем виртуальной памяти, которую может использовать пользователь.
Так Вы limits.conf
имел бы строку (к максимуму 4G
из памяти)
luser hard as 4000000
ОБНОВЛЕНИЕ - CGroups
Ограничения, наложенные ulimit
и limits.conf
для каждого процесса. Я определенно не был ясен на той точке.
Если Вы хотите ограничить общий объем памяти пользовательское использование (который является тем, что Вы спросили). Вы хотите использовать cgroups.
В /etc/cgconfig.conf
:
group memlimit {
memory {
memory.limit_in_bytes = 4294967296;
}
}
Это создает a cgroup
это имеет макс. предел памяти 4 ГиБ.
В /etc/cgrules.conf
:
luser memory memlimit/
Это вызовет все процессы, выполненные luser
быть выполненным в memlimit
cgroups, созданный в cgconfig.conf
.
Вы не можете, использование ограничения использования памяти на уровне пользователя, ulimit может сделать это, но для единственного процесса.
Даже с использованием на пользователя ограничивает в /etc/security/limits.conf
, пользователь может использовать всю память путем выполнения нескольких процессов.
Если Вы действительно хотите ограничить ресурсы, необходимо использовать инструмент управления ресурсами, как rcapd, используемый проектами и зонами в соответствии с Солярисом.
Существует что-то, что, кажется, обеспечивает подобные функции на Linux, который Вы могли бы исследовать: cgroups.
cgroups
- правильный способ сделать это, как указывали другие ответы. К сожалению, идеального решения проблемы не существует, как мы рассмотрим ниже. Существует множество различных способов установить лимиты использования памяти cgroup. То, как сделать сеанс входа пользователя в систему автоматически частью cgroup, зависит от системы к системе. Red Hat имеет некоторые инструменты, а также systemd .
memory.memsw.limit_in_bytes
и memory.limit_in_bytes
устанавливают ограничения, включая и не включая своп, соответственно. Недостатком memory.limit_in_bytes
является то, что он подсчитывает файлы, кэшированные ядром от имени процессов в контрольной группе, в соответствии с квотой группы. Меньше кэширования означает больше доступа к диску, поэтому вы потенциально теряете часть производительности, если в противном случае в системе была бы некоторая доступная память.
С другой стороны, memory.soft_limit_in_bytes
позволяет контрольной группе превышать -квоту, но если вызывается убийца OOM ядра, то те контрольные группы, которые превышают свои квоты, уничтожаются первыми, логически. Недостатком этого, однако, является то, что бывают ситуации, когда некоторое количество памяти требуется немедленно, и у убийцы OOM нет времени искать процессы, которые нужно убить, и в этом случае что-то может выйти из строя до того, как пользователь превысит -квоту. процессы убиваются.
ulimit
, однако, совершенно не подходит для этого. ulimit накладывает ограничения на использование виртуальной памяти, что почти наверняка не то, что вам нужно. Многие реальные -приложения используют гораздо больше виртуальной памяти, чем физической. Большинство сред выполнения -со сбором мусора (Java, Go )работают таким образом, чтобы избежать фрагментации. Тривиальная программа «hello world» на C, скомпилированная с очистителем адресов, может использовать 20 ТБ виртуальной памяти. Распределители, которые не полагаются на sbrk
, такие как jemalloc (, который является распределителем по умолчанию для Rust )или tcmalloc , также будут использовать виртуальную память, значительно превышающую их физическую. Применение. Для повышения эффективности многие инструменты будут отображать файлы mmap,что увеличивает виртуальное использование, но не обязательно физическое использование. Все мои процессы Chrome используют по 2 ТБ виртуальной памяти каждый. Я на ноутбуке с 8 ГБ физической памяти. Любая попытка установить здесь квоты виртуальной памяти либо сломает Chrome, либо заставит Chrome отключить некоторые функции безопасности, основанные на выделении (, но не использующем )больших объемов виртуальной памяти, либо будет совершенно неэффективна для предотвращения доступа пользователя. от злоупотребления системой.
useradd
? – myWallJSON 16.03.2012, 15:41