Как установить ограничение на количество файлов, которые может открыть Linux?

11

Я планирую запустить приложение Java с помощью nohup ... &. Ограничение должно применяться к таким командам.

Рикардо Альтамирано
источник
Но это вызвало ошибку в моей Java-программе

Ответы:

7

В большинстве систем используется PAM , и для pam_limitsмодуля установлены ограничения на основе /etc/security/limits.conf. Предел для каждого пользователя для открытых файлов называется nofile. Вы можете установить его для каждого пользователя или для конкретного пользователя или группы, и вы можете установить ограничение, которое пользователь может переопределить (мягкое ограничение), и другое ограничение, которое может переопределить только root (жесткое ограничение). Документация и limits.confстраница имейте детали. Например, чтобы поднять ограничение до 50000 для всех, вставьте эту строку /etc/limits.conf(настройка вступает в силу при входе в систему):

* - nofile 50000
Жиль "ТАК - прекрати быть злым"
источник
в limits.confдо * hard nofile 50000и / или * soft nofile 50000. Я не знаю технической разницы между жестким и мягким и всегда делал то и другое.
рон
в SLES 11.4, например, используя tcsh, можно limit descriptors 50000изменить значение в данном терминальном окне / сеансе.
рон
@ron -` во втором столбце устанавливает как мягкий, так и жесткий предел. Вам нужно только установить их отдельно, если вы хотите разные значения. Мягкое ограничение можно изменить в любое время, выполнив ulimitкоманду ( limitвызывается в csh). Непривилегированный пользователь никогда не может превысить жесткий лимит.
Жиль "ТАК - прекрати быть злым"
если я только установил хард, значение софта остается значением по умолчанию? если я установлю только мягкое и не жесткое, останется ли значение по умолчанию жестким или равным мягкому значению? Могу ли я установить мягкий> жесткий? Софт - это реальная ценность, которая действует? извините за вопросы.
рон
@ron Мягкое ограничение автоматически ограничивается жестким ограничением. Если вы устанавливаете только жесткий предел, то для мягкого ограничения устанавливается значение max (default_soft_limit, actual_hard_limit).
Жиль "ТАК - прекрати быть злым"
4

Вы можете добавить fs.file-max = <your number>в /etc/sysctl.conf. Затем перезагрузите компьютер.

user1606
источник
cat / proc / sys / fs / file-max - 169203 ,, но ulimit -n - 1024
Нет необходимости перезагружаться. Просто беги sysctl fs.file-max=123456. ( /etc/sysctl.confчитается во время загрузки скриптом, который вызывает sysctlсодержимое.)
Жиль "ТАК - перестать быть злым"
3
ulimit -n

может изменить настройки процесса и

/proc/sys/fs/file-max

или вызываемая переменная sysctl fs.file-maxможет использоваться для чтения и установки общесистемного значения

ptman
источник
cat / proc / sys / fs / file-max - 169203 ,, но ulimit -n - 1024
1

Вы можете использовать ulimit для этого:

http://bloggerdigest.blogspot.com/2006/10/purpose-of-ulimit-linux-command.html

Хотя вы должны убедиться, что открытие такого количества файловых дескрипторов абсолютно необходимо, прежде чем прибегать к таким настройкам. Увеличение максимального количества дескрипторов файлов только потому, что вы забыли сделать в цикле inputtream.close (), только задержит основную проблему.


источник
1
Я хочу подключиться к множеству клиентов
1

Используйте ulimit (команда Bash - man bash или найдите аналог для вашей оболочки) для каждого экземпляра программы. Не используйте глобальные системные ограничения, если вы не знаете, что делаете - возможно DoS.

teZeriusz
источник
В SLES 11.4 Я поставил nofileв limits.confбыть 100000. успешно. Я могу засвидетельствовать, что слишком большое значение помешало последующему входу в систему по SSH, и мне пришлось загружаться с dvd, чтобы исправить это значение в limit.conf для восстановления системы.
рон
0
vi ~/.bashrc

И добавить строку в конце файла

ulimit -n 169203
Пауло Томе
источник