При запуске моего приложения я иногда получаю сообщение об ошибке too many files open
.
Запуск ulimit -a
сообщает, что ограничение равно 1024. Как увеличить лимит выше 1024?
Edit
ulimit -n 2048
приводит к ошибке разрешения.
При запуске моего приложения я иногда получаю сообщение об ошибке too many files open
.
Запуск ulimit -a
сообщает, что ограничение равно 1024. Как увеличить лимит выше 1024?
Edit
ulimit -n 2048
приводит к ошибке разрешения.
Вы всегда можете попробовать сделать 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, если вы хотите изменить значение по умолчанию.
Если вы используете 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
затем войдите в систему как 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
Это и их бум, бум бум.
Если некоторые из ваших услуг отказываются от ulimits, иногда проще включить соответствующие команды в службу init- script. Например, когда Apache сообщает
[alert] (11) Ресурс временно недоступен: apr_thread_create: невозможно создать рабочий поток
Попробуйте поместить ulimit -s unlimited
в /etc/init.d/httpd
. Это не требует перезагрузки сервера.