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

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

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

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

4 ответа

Решение

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

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

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

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

* hard nofile 10000

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

ulimit -n 10000

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

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

webuser hard nofile 64000

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

su - webuser

2) Отредактируйте следующие два файла для веб-пользователя

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

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

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

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

Вот оно и их бум, бум бум.

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

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

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

Другие вопросы по тегам