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