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

При запуске приложения я иногда получаю ошибку о «слишком большом количестве открытых файлов».

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

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

Комментарии к вопросу (3)
Решение

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

Каждая операционная система имеет разные жесткие ограничения в файле конфигурации. Например, жесткий открытый предел файла в 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. Лимиты являются собственностью процесса. Они наследуются при создании дочернего процесса, поэтому во время инициализации системы в скриптах init должны быть установлены общесистемные ограничения, а пользовательские ограничения должны устанавливаться во время входа в систему, например, с помощью pam_limits.

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

Комментарии (3)

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

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

* жесткий nofile 10000

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

ulimit -n 10000

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

Комментарии (6)
  1. Добавьте следующую строку в /etc/security/limits.conf
webuser hard nofile 64000

затем войдите как веб-пользователь

su - webuser
  1. Редактировать следующие два файла для веб-пользователя

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

echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile
  1. Выйдите из системы, затем войдите в систему и убедитесь, что изменения были внесены правильно:
$ ulimit -a | grep open
open files                      (-n) 64000

Вот и все, бум, бум бум.

Комментарии (2)

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

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

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

Комментарии (0)