Исправляем ошибку в Nginx (23: Too many open files in system)

baltun

Администратор
Сообщения
10.873
Реакции
2.584
Баллы
2.003
Иногда при высоких нагрузках можно видеть в nginx такую ошибку:
Код:
2010/04/16 13:24:16 [crit] 21974#0: *3188937 open() “/usr/local/nginx/html/50x.html” failed (24: Too many open files), client: 88.x.y.z, server: example.com, request: “GET /file/images/background.jpg HTTP/1.1”, upstream: “http://10.8.4.227:81//file/images/background.jpg”, host: “example.com”

В Linux / UNIX системах устанавливаются мягкие и жесткие ограничение на количество открытых файлов. Вы можете использовать команду ulimit для просмотра этих ограничений:
Код:
su - nginx

Чтобы увидеть жесткие и мягкие ограничения, выполните команду следующим образом:
Код:
ulimit -Hn
ulimit -Sn

Как увеличить лимит на уровне ОС Linux.

Для этого требуется отредактировать файл /etc/sysctl.conf.
Код:
nano /etc/sysctl.conf

Добавьте или измените следующую строку:
Код:
fs.file-max = 70000

Сохраните и закройте файл. Измените /etc/security/limits.conf, введите:
Код:
nano /etc/security/limits.conf

Установите мягкий и жесткий лимит для всех пользователей или пользователей nginx следующим образом:
Код:
nginx soft nofile 10000
nginx hard nofile 30000

Чтобы загрузить в sysctl параметры из указанного файла /etc/sysctl.conf, введите следующую команду:
Код:
sysctl -p

Nginx также поставляется с директивой worker_rlimit_nofile, которая позволяет увеличить этот предел. Чтобы установить значение для максимальных дескрипторов файлов, которые могут быть открыты процессом nginx. Измените файл nginx.conf, введите:
Код:
 nano /usr/local/nginx/conf/nginx.conf

Добавьте или измените следующую строку:
Код:
worker_rlimit_nofile 30000;

Сохраните и закройте файл. Перезагрузите веб-сервер nginx. Для проверки лимитов выполните:
Код:
su - nginx
ulimit -Hn
ulimit -Sn
 
Назад
Верх Низ