Учитывает ли chpst настройки ulimit?

Учитывает ли chpst настройки ulimit?

В настоящее время у нас возникли проблемы с сервером на базе JBoss на платформе Linux. Фактически, у нас заканчиваются доступные дескрипторы файлов в процессе, и сервер зависает.

Мы установили ulimit, разрешающий 10000 открытых файловых дескрипторов, и сервер постоянно падает, когда открыто гораздо меньше файловых дескрипторов.

Единственное, что я заметил, это то, что наши скрипты запуска используют chpst, и я заметил, что chpst позволяет вам устанавливать ограничения файлов / процессов / памяти в качестве аргументов. Кто-нибудь знает, учитывает ли chpst существующий системный ulimit, если не заданы явные команды, или он использует собственные внутренние значения по умолчанию? Если да, то где их найти?

Спасибо

решение1

chpst даже не принимает во внимание то, что вы передаете в качестве аргументов. Исходный код действительно трудно читать, но strace подтверждает:

execve("/usr/sbin/chpst", ["chpst", "-o", "10000", "/bin/sh", "-c", "sleep 5"], [/* 26 vars */]) = 0
...
getrlimit(RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=4*1024}) = 0
setrlimit(RLIMIT_NOFILE, {rlim_cur=4*1024, rlim_max=4*1024}) = 0
execve("/bin/sh", ["/bin/sh", "-c", "sleep 5"], [/* 26 vars */]) = 0
...

Я бы избегал.

решение2

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

В его strace getrlimit говорит, что максимальный жесткий лимит составляет 4096, и он просит chpst установить мягкий лимит на 10000. chpst так и делает, но, как задокументировано вуправление ограничениями.conf, мягкие ограничения не могут превышать жесткие ограничения, которые накладываются ядром и пользователем root. Единственное, что можно сказать по этому поводу, это то, что chpst, возможно, должен вывести предупреждение, вот и все. Конечно, не "я бы избегал".

Обратите внимание, что это означает, что исходная проблема может быть связана не с chpst, а с конфигурацией системы. chpst — это всего лишь инструмент для установки произвольных ограничений для одного процесса, а не инструмент для настройки ядер.

Связанный контент