В Linux - установите максимальные открытые файлы неограниченно. Возможное?

Можно ли установить максимальное количество открытых файлов на какое-либо "бесконечное" значение или оно должно быть числом?

У меня было требование установить лимит дескриптора для пользователя-демона как "неограниченного", и я пытаюсь определить, возможно ли это или как это сделать. Я видел, что некоторые списки рассылки ссылаются на значение "max" , которое можно использовать (как в: "myuser hard nofile max", но пока что страницы руководства и ссылки, с которыми я консультировался, не поддерживают это.

Если я не могу использовать "max" или подобное, я хотел бы знать, как определить, какое максимальное количество файлов (теоретически), поэтому у меня есть какая-то основа для любого числа, которое я выбираю. Я не хочу использовать 100000000 или что-то, если есть более разумный способ получить верхнюю границу.

Я использую RHEL 5, если это важно.

Обновление: Я идиот, когда дело доходит до написания вопросов. В идеале я хотел бы сделать это в файле limits.conf(откуда и будет "max" ). Изменит ли это какие-либо ответы?


Спасибо за комментарии. Это для экземпляра JBOSS, а не для демона, который я пишу, поэтому я не знаю, полезен ли мне метод setrlimit(). Тем не менее, Jefromi - мне нравится определение Infinity:) Я видел сообщение, которое предполагает, что файловый дескриптор - это "два шорта и указатель", поэтому я должен был бы вычислить приблизительную верхнюю границу.

Ответы

Ответ 1

POSIX позволяет установить ограничение ресурса RLIMIT_NOFILE на RLIM_INFINITY, используя setrlimit(). Это означает, что система не будет применять этот предел ресурсов. Конечно, вы все равно будете ограничены реализацией (например, MAXINT) и любыми другими ограничениями ресурсов (например, доступной памятью).

Обновление: RHEL 5 имеет максимальное значение 1048576 (2 20) для этого предела (NR_OPEN в /usr/include/linux/fs.h) и не будет принимать больше значение, включая бесконечность, даже для root. Итак, на RHEL 5 вы можете использовать это значение в /etc/security/limits.conf, и это будет как можно ближе к бесконечности.

Не так давно патч Linux для Linux, чтобы этот предел был установлен на бесконечность, однако он с тех пор был возвращен в результате непредвиденных последствий.

Ответ 2

Попробуйте строку

<domain>    -

заменив <domain> на имя пользователя, в простейшем случае.

лимитная страница limits.conf говорит

-
    for enforcing both soft and hard resource limits together.

    Note, if you specify a type of '-' but neglect to supply the
    item and value fields then the module will never enforce any
    limits on the specified user/group etc. .