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

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

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

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

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

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


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

2 ответа

Решение

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

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

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

Попробуйте линию

<domain>    -

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

Страница руководства limit.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. .
Другие вопросы по тегам