Может кто-нибудь объяснить (или знать об источнике), который предоставляет подробности об элементах в 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]
Что происходит при превышении ЦП? Процессы убиты? Только одному процессу или всему пользователю запрещено использовать процессор? Это для одного сеанса или для максимального времени в каждую минуту?
Я пытался найти ответы, но все, что я могу найти, - это одна справочная страница, которая почти не содержит подробностей.
Ответы:
Почему они разные?
В Linux есть разные классы планировщиков процессов. По умолчанию один (CFQ) в основном дает равное количество временных интервалов каждому процессу, желающему запустить, и ставит в очередь выполняемые задачи таким образом, что каждый ожидает в среднем равное количество времени для своего хода. Существуют некоторые исключения из этого правила, но это основная идея.
Другой класс планировщика - планировщик реального времени. Реальное время - это немного другое, скорее выполняемые задачи из очереди в честную схему очередности, процесс в реальном времени получит процессорное время, как только это потребуется процессу, это выселяет запущенный процесс из процессора, чтобы освободить место для «реального времени». ' обработать.
Какие ценности они могут принять?
Что делает «приоритет», так это изменяет правильность процесса, чтобы при входе в систему ваш основной процесс начинался с определенной степени, все дочерние процессы, которые вы порождали, также начинались с той же степени.
Это приводит к повышению вероятности его планирования в пользу других конкурирующих процессов, и пользовательский опыт может быть либо более отзывчивым / интерактивным для более низких значений добротности, либо менее отзывчивым / интерактивным, если повышается благосклонность.
Для обычных пользователей входа в систему может быть важно иметь более низкий приоритет, чем, например, для обслуживаемых демонов, или для пользователя root иметь более высокий приоритет для входа в систему, чем все остальное.
Что касается реального времени, конфликт обрабатывается с помощью поля 'rtprio'. Если у вас есть две задачи реального времени, обе из которых хотят выполнить, то значение rtprio используется, чтобы определить, какой из процессов выбрать в первую очередь по приоритету. Более высокое значение rtprio создает задачи с более высоким приоритетом.
Установка этого значения в файле limit.conf позволяет задавать задачи реального времени с определенным диапазоном приоритетов, не используя root для установки значения. Это не влияет на задачи, не настроенные для запуска с использованием планировщика реального времени.
Значение 'nice' должно делать то же самое, что и 'rtprio', но для стандартного планирования CFQ. Я никогда не пробовал это все же. Он устанавливает начальный процесс, порождаемый, когда PAM устанавливает эти пределы в это хорошее значение, тогда обычный пользователь может перейти на этот хороший уровень или выше, не требуя root для их установки. Если вы не используете явное ренизинг, это означает, что все процессы, порожденные из оболочки из этого логина (например), унаследуют значение nice, установленное в limit.conf, из родительского процесса, который был изначально создан.
Какие значения по умолчанию?
Пределы «по умолчанию» - технически они все установлены на то, что pid 1, если явно не установлено, ограничения ресурсов наследуются от родительского процесса, если никакие ограничения не были определены или переопределены где-либо, тогда наследование от
init
является значением по умолчанию.Другие ценности
Когда процесс инициализируется, он выделяет некоторую память, известную как «сегмент данных», когда процесс копируется в память, именно здесь живет пространство для глобалов, возможно, некоторые другие инициализированные данные и память, выделенные из кучи. Лимит контролирует максимальную выделенную сумму, которую может занять процесс.
Маловероятно, что вы когда-нибудь достигнете этого предела, потому что malloc () редко использует сегмент данных для хранения данных.
Это буквально устанавливает максимальный размер файла, в который может быть записан этот пользователь.
Почти вся память, которую приобрело приложение, является «выполнимой». То есть можно поменять местами. Память заблокирована, память никогда не заменяется и остается резидентной. Это значение строго контролируется, потому что люди могут злоупотреблять системой памяти и вызывать обмен. Обычно это полезно для приложений безопасности (которые никогда не хотят, чтобы их страницы менялись местами, и становятся читаемыми из раздела подкачки).
Это представляет общее количество времени, которое процесс может потреблять на процессоре. Процесс, который превышает это значение, уничтожается. Обратите внимание, что это НЕ то же самое, что количество времени, прошедшее с момента запуска процесса. То есть ограничение на процессорное время в 1 минуту потребует 1 минуту, если процесс будет загружен на 100%, но 2 минуты, если процесс использует 50%.
Что происходит, когда превышен процессор?
Процесс получает сигнал уничтожения,
SIGXCPU
который завершает процесс. Это может быть перехвачено родительским процессом и обработано там.Только один процесс или весь пользователь лишен возможности использовать процессор?
Почти все указанные ограничения обрабатываются для каждого отдельного процесса. Процессорное время включено. Я полагаю , что единственное, что не является общим количеством входов в систему и общим числом процессов, выполненных этим пользователем.
Некоторые другие проблемы с ограничениями:
источник
Это для
pam_limits
модуля ... этоsetrlimit(2)
иsysctl(8)
ценности. Мой поиск не обнаружил каких-либо жестких ограничений, но цитируемые справочные страницы дают некоторые объяснения.источник
Быстрые ответы хорошие ответы, так что здесь идет.
schedtool -r
; а такжеulimit -a
.Не забудьте установить как мягкие, так и жесткие ограничения, даже если они будут иметь одинаковое значение. В моих тестах это было единственное, что показывало разницу в команде ulimit.
Надеюсь, это поможет вам.
источник