Как изменить количество ограничений для открытых файлов в Linux?

При запуске моего приложения я иногда получаю сообщение об ошибке too many files open.

Запуск ulimit -a сообщает, что ограничение равно 1024. Как увеличить лимит выше 1024?

Edit ulimit -n 2048 приводит к ошибке разрешения.

Ответ 1

Вы всегда можете попробовать сделать ulimit -n 2048. Это будет только reset лимит для вашей текущей оболочки, а указанный вами номер не должен превышать жесткую границу

Каждая операционная система имеет другую конфигурацию жесткого ограничения в файле конфигурации. Например, ограничение жесткого открытого файла на Solaris можно установить при загрузке из /etc/system.

set rlim_fd_max = 166384
set rlim_fd_cur = 8192

В OS X эти же данные должны быть установлены в /etc/sysctl.conf.

kern.maxfilesperproc=166384
kern.maxfiles=8192

В Linux эти параметры часто находятся в файле /etc/security/limits.conf.

Существует два вида ограничений:

  • мягкие лимиты - это просто действующие в настоящее время ограничения.
  • жесткие ограничения отмечают максимальное значение, которое невозможно превысить, установив мягкий предел

Мягкие ограничения могут быть установлены любым пользователем, в то время как жесткие ограничения могут быть изменены только root. Пределы являются свойством процесса. Они наследуются при создании дочернего процесса, поэтому системные ограничения должны быть установлены во время инициализации системы в сценариях инициализации, и пользовательские ограничения должны быть установлены во время входа пользователя, например, с помощью pam_limits.

Часто устанавливаются значения по умолчанию при загрузке машины. Таким образом, даже если вы можете reset ваш ulimit в отдельной оболочке, вы можете обнаружить, что при перезагрузке он возвращается к предыдущему значению. Вы можете захотеть grep ваши сценарии загрузки для существования команд ulimit, если вы хотите изменить значение по умолчанию.

Ответ 2

Если вы используете Linux, и вы получили ошибку разрешения, вам нужно будет увеличить допустимый предел в файле /etc/limits.conf или /etc/security/limits.conf (где находится файл зависит от вашего конкретного дистрибутива Linux).

Например, чтобы позволить кому-либо на машине увеличить количество открытых файлов до 10000, добавьте строку в файл limits.conf.

* hard nofile 10000

Затем выйдите из системы и перейдите к своей системе, и вы сможете это сделать:

ulimit -n 10000

без ошибки разрешения.

Ответ 3

1) Добавьте следующую строку в /etc/security/limits.conf

webuser hard nofile 64000

затем войдите в систему как webuser

su - webuser

2) Отредактируйте следующие два файла для webuser

добавить файлы .bashrc и .bash_profile, запустив

echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile

3) Выйдите из системы, затем войдите в систему и убедитесь, что изменения сделаны правильно:

$ ulimit -a | grep open
open files                      (-n) 64000

Это и их бум, бум бум.

Ответ 4

Если некоторые из ваших услуг отказываются от ulimits, иногда проще включить соответствующие команды в службу init- script. Например, когда Apache сообщает

[alert] (11) Ресурс временно недоступен: apr_thread_create: невозможно создать рабочий поток

Попробуйте поместить ulimit -s unlimited в /etc/init.d/httpd. Это не требует перезагрузки сервера.