Как установить ограничение на количество файлов, которые может открыть 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. Затем перезагрузите компьютер.


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может использоваться для чтения и установки общесистемного значения


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.


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.