Изменение лимитов в nginx

При небольшой ddos атаке на сервер с в логе стали появляться ошибки «failed (24: Too many open files)»
Стал вопрос об увеличении лимитов, тем более, что процессов было не много, памяти свободной достаточно, своп на нуле и процессор не был нагружен на 100%.
Решено было увеличить лимиты для nginx.

В сети нашлось неплохое решение. Используя его, а так же гугл, было пройден следующий путь :).

Определить текущее положение дел в системе, можно, давая команду:


for pid in `pidof nginx`; do echo "$(< /proc/$pid/cmdline)"; egrep 'files|Limit' /proc/$pid/; echo "Currently open files: $(ls -1 /proc/$pid/fd | wc -l)"; echo; done

В результате мы получаем отчет о количестве открытых файлов и текущих пределах.
1. Операционная система устанавливает некоторые лимиты на количество одновременно открытых файлов. Делается это с целью экономии памяти и ресурсов процессора, так как каждый открытый файл - это дополнительный дискриптор, под который отводится память. Мы можем самостоятельно устанавливать лимиты на количество открытых файлов, редактируя /etc/sysctl.conf:

# mcedit /etc/sysctl.conf

Добавляем в него строку

fs.file-max = 65535

Следом редактируем файл /etc/security/limits.conf:

# mcedit /etc/security/limits.conf

В нем мы устанавливаем мягкий и жестки лимиты для nginx:

nginx soft nofile 10000
nginx hard nofile 30000

Сохраняем оба файла и применяем изменения:

# sysctl -p

2. Все, что требовалось для ОС мы сделали, теперь обратимся к nginx:
Редактируем файл /etc/nginx/nginx.conf

# mcedit /etc/nginx/nginx.conf

Добавляем туда:

worker_rlimit_nofile 30000;

И делаем рестарт nginx:

# service nginx restart

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *