nginx uLimit 'worker_connections превышает ограничение на количество открытых файлов: 1024'


15

Я продолжаю получать эту ошибку, nginx/error.logи это сводит меня с ума:

8096 worker_connections exceed open file resource limit: 1024

Я перепробовал все, что могу придумать и не могу понять, что ограничивает nginx здесь. Можете ли вы сказать, что мне не хватает?

nginx.conf имеет это:

worker_processes 4;
events {
        worker_connections 8096;
        multi_accept on;
        use epoll;
}

Я изменил Ulimit моей системы security/limits.confследующим образом:

# This is added for Open File Limit Increase
*               hard    nofile          199680
*               soft    nofile          65535

root            hard    nofile          65536
root            soft    nofile          32768

# This is added for Nginx User
nginx           hard    nofile          199680
nginx           soft    nofile          65535

Это все еще показывало ошибку. Поэтому я также попытался редактировать /etc/default/nginxи добавил эту строку:

ULIMIT="-n 65535"

Это все еще показывает ту же ошибку. Не могу понять, что ограничивает рабочее соединение nginx только 1024. Можете ли вы указать мне?

У меня есть Debian 7 + nginx

Ответы:


30

Установите worker_rlimit_nofile 65535;в nginx.conf в основном контексте.


1
Это оно! Это исправило это. О, ты спаситель. Теперь он работает, даже если ULimit не установлен вручную /etc/default/nginx file. Потрясающие. Спасибо @Xaviour
Neel

1
молодец Ксавьер.
Дэйв Холланд,

@ Ксавье это убрало сообщение об ошибке, но можете ли вы объяснить, почему это работает без изменения ulimit, как указано в ответе ниже? Поиски в Google говорят, чтобы изменить ulimit в limit.conf или systcl.conf, но ни один не работает для меня.
Bsienn

2

Стать пользователем:

su - nginx

Проверьте пределы:

ulimit -Hn
ulimit -Sn

Отредактируйте количество файлов, которые файловая система позволит вам открыть:

vi /etc/sysctl.conf
fs.file-max = 70000

загрузить ваши изменения:

sysctl -p

Посмотрите, поможет ли это.


Я использую init и еще не установил systemctl. Будет ли это иметь значение?
Нил

Когда я перешел на пользователя Nginx, ulimit -Hn там отображается правильно. Затем я проверил, init.d/nginxи он проверяет, установлен ли ULIMIT в папке по умолчанию (там, где он уже установлен), а затем он должен установить это значение, но это не так:Check if the ULIMIT is set in /etc/default/nginx
Neel

После изменения file-max и как только я запускаю sysctl -pзависание ubuntu 18.04.2, открывает слишком много файлов и не загружается, пришлось удалить код в безопасной загрузке, чтобы заставить ОС загрузиться снова.
Bsienn
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.