При запуске моего приложения я иногда получаю сообщение об ошибке too many files open
.
Запуск ulimit -a
отчетов о том, что лимит составляет 1024. Как мне увеличить лимит выше 1024?
Редактировать
ulimit -n 2048
результаты в ошибке разрешения.
При запуске моего приложения я иногда получаю сообщение об ошибке too many files open
.
Запуск ulimit -a
отчетов о том, что лимит составляет 1024. Как мне увеличить лимит выше 1024?
Редактировать
ulimit -n 2048
результаты в ошибке разрешения.
Ответы:
Вы всегда можете попробовать сделать 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, если хотите изменить значение по умолчанию.
ulimit
. Вы должны указать, что вы используете (например, WSL, Cygwin).
Если вы используете Linux и получили ошибку разрешения, вам нужно будет увеличить допустимый предел в файле /etc/limits.conf
или /etc/security/limits.conf
(где файл находится в зависимости от вашего конкретного дистрибутива Linux).
Например, чтобы разрешить кому-либо на компьютере увеличить количество открытых файлов до 10000, добавьте строку в limits.conf
файл.
* hard nofile 10000
Затем выйдите из системы и войдите в свою систему, и вы сможете сделать:
ulimit -n 10000
без ошибки разрешения.
root
пользователя. Вы должны указать root hard nofile 10000
, хотите ли вы настроить root
ограничение.
ulimit
и, наконец, узнал, что я вошел в систему как root. Вот почему я продолжал видеть 1024 в ulimit -a
. Я изменил wildcare и добавил *
внутрь limits.conf
. Теперь все хорошо (я использую ssh-ключи, не волнуйтесь: P) - Спасибо !!!
/etc/security/limits.d/
.
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
. Это не требует перезагрузки сервера.