Linux /etc/security/limits.conf объяснение

9

Может кто-нибудь объяснить (или знать об источнике), который предоставляет подробности об элементах в limit.conf? Страница man не дает подробностей.

Например, он говорит:

rtprio 
maximum realtime priority allowed for non-privileged processes (Linux 2.6.12 and higher) 

priority 
the priority to run user process with (negative values boost process priority) 

Чем они отличаются? Какие ценности они могут принять? Что они по умолчанию?

Некоторые из элементов очевидны, но где я могу найти лучшие объяснения (значения по умолчанию, диапазоны, что они на самом деле означают и т. Д.):

data 
maximum data size (KB) 

fsize 
maximum filesize (KB) 

memlock 
maximum locked-in-memory address space (KB) 

cpu 
maximum CPU time (minutes) 

nice 
maximum nice priority allowed to raise to (Linux 2.6.12 and higher) values: [-20,19] 

Что происходит при превышении ЦП? Процессы убиты? Только одному процессу или всему пользователю запрещено использовать процессор? Это для одного сеанса или для максимального времени в каждую минуту?

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

myforwik
источник
Rute - отличное введение в администрирование Linux - хотя оно не предоставляет много подробностей о limit.conf, оно говорит вам, где найти эту информацию - rute.2038bug.com/index.html.gz
symcbean

Ответы:

18
rtprio 
maximum realtime priority allowed for non-privileged processes (Linux 2.6.12 and higher) 

priority 
the priority to run user process with (negative values boost process priority) 

Почему они разные?

В Linux есть разные классы планировщиков процессов. По умолчанию один (CFQ) в основном дает равное количество временных интервалов каждому процессу, желающему запустить, и ставит в очередь выполняемые задачи таким образом, что каждый ожидает в среднем равное количество времени для своего хода. Существуют некоторые исключения из этого правила, но это основная идея.

Другой класс планировщика - планировщик реального времени. Реальное время - это немного другое, скорее выполняемые задачи из очереди в честную схему очередности, процесс в реальном времени получит процессорное время, как только это потребуется процессу, это выселяет запущенный процесс из процессора, чтобы освободить место для «реального времени». ' обработать.

Какие ценности они могут принять?

Что делает «приоритет», так это изменяет правильность процесса, чтобы при входе в систему ваш основной процесс начинался с определенной степени, все дочерние процессы, которые вы порождали, также начинались с той же степени.

Это приводит к повышению вероятности его планирования в пользу других конкурирующих процессов, и пользовательский опыт может быть либо более отзывчивым / интерактивным для более низких значений добротности, либо менее отзывчивым / интерактивным, если повышается благосклонность.

Для обычных пользователей входа в систему может быть важно иметь более низкий приоритет, чем, например, для обслуживаемых демонов, или для пользователя root иметь более высокий приоритет для входа в систему, чем все остальное.

Что касается реального времени, конфликт обрабатывается с помощью поля 'rtprio'. Если у вас есть две задачи реального времени, обе из которых хотят выполнить, то значение rtprio используется, чтобы определить, какой из процессов выбрать в первую очередь по приоритету. Более высокое значение rtprio создает задачи с более высоким приоритетом.

Установка этого значения в файле limit.conf позволяет задавать задачи реального времени с определенным диапазоном приоритетов, не используя root для установки значения. Это не влияет на задачи, не настроенные для запуска с использованием планировщика реального времени.

Значение 'nice' должно делать то же самое, что и 'rtprio', но для стандартного планирования CFQ. Я никогда не пробовал это все же. Он устанавливает начальный процесс, порождаемый, когда PAM устанавливает эти пределы в это хорошее значение, тогда обычный пользователь может перейти на этот хороший уровень или выше, не требуя root для их установки. Если вы не используете явное ренизинг, это означает, что все процессы, порожденные из оболочки из этого логина (например), унаследуют значение nice, установленное в limit.conf, из родительского процесса, который был изначально создан.

Какие значения по умолчанию?

Пределы «по умолчанию» - технически они все установлены на то, что pid 1, если явно не установлено, ограничения ресурсов наследуются от родительского процесса, если никакие ограничения не были определены или переопределены где-либо, тогда наследование от initявляется значением по умолчанию.

Другие ценности

data 
maximum data size (KB) 

Когда процесс инициализируется, он выделяет некоторую память, известную как «сегмент данных», когда процесс копируется в память, именно здесь живет пространство для глобалов, возможно, некоторые другие инициализированные данные и память, выделенные из кучи. Лимит контролирует максимальную выделенную сумму, которую может занять процесс.

Маловероятно, что вы когда-нибудь достигнете этого предела, потому что malloc () редко использует сегмент данных для хранения данных.

fsize 
maximum filesize (KB) 

Это буквально устанавливает максимальный размер файла, в который может быть записан этот пользователь.

memlock 
maximum locked-in-memory address space (KB) 

Почти вся память, которую приобрело приложение, является «выполнимой». То есть можно поменять местами. Память заблокирована, память никогда не заменяется и остается резидентной. Это значение строго контролируется, потому что люди могут злоупотреблять системой памяти и вызывать обмен. Обычно это полезно для приложений безопасности (которые никогда не хотят, чтобы их страницы менялись местами, и становятся читаемыми из раздела подкачки).

cpu 
maximum CPU time (minutes) 

Это представляет общее количество времени, которое процесс может потреблять на процессоре. Процесс, который превышает это значение, уничтожается. Обратите внимание, что это НЕ то же самое, что количество времени, прошедшее с момента запуска процесса. То есть ограничение на процессорное время в 1 минуту потребует 1 минуту, если процесс будет загружен на 100%, но 2 минуты, если процесс использует 50%.

Что происходит, когда превышен процессор?

Процесс получает сигнал уничтожения, SIGXCPUкоторый завершает процесс. Это может быть перехвачено родительским процессом и обработано там.

Только один процесс или весь пользователь лишен возможности использовать процессор?

Почти все указанные ограничения обрабатываются для каждого отдельного процесса. Процессорное время включено. Я полагаю , что единственное, что не является общим количеством входов в систему и общим числом процессов, выполненных этим пользователем.

Некоторые другие проблемы с ограничениями:

  • Макс процессов включает в себя количество легких потоков.
  • Предел RSS ничего не делает и не имеет в течение ряда лет его бессмысленно устанавливать.
Мэтью Ифе
источник
1

Это для pam_limitsмодуля ... это setrlimit(2)и sysctl(8)ценности. Мой поиск не обнаружил каких-либо жестких ограничений, но цитируемые справочные страницы дают некоторые объяснения.

vonbrand
источник
1

Быстрые ответы хорошие ответы, так что здесь идет.

  • Узнайте минимальные и максимальные значения для приоритетов с schedtool -r; а также
  • запросить текущие ограничения с ulimit -a.

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

Надеюсь, это поможет вам.

ураганный огонь
источник