Контент был перемещен из Qiita.
Иногда необходимо смягчить ограничения Max open files для таких сервисов, как nginx.
До CentOS7 не было systemd, поэтому приходилось редактировать limits.conf, но в systemd это можно сделать намного проще.
Предположим, что мы сталкиваемся с проблемами на примере nginx.
Проверка текущего состояния
# grep "^Max open files" /proc/`cat /var/run/nginx.pid `/limits
Max open files 1024 4096 files
В текущем состоянии, если жесткий лимит составляет 4096, то один процесс не может открыть больше этого количества файлов. Это часто бывает недостаточно, когда nginx управляет большим количеством файлов из-за настройки worker_connections или кэширования.
Изменение настроек
# mkdir /etc/systemd/system/nginx.service.d
# vi /etc/systemd/system/nginx.service.d/limits.conf
[Service]
LimitNOFILE=65536
Применение изменений
- Перезагрузите systemd, чтобы он прочитал изменения
# systemctl daemon-reload
- Перезапустите nginx и запустите процесс заново
# systemctl restart nginx
Проверка после изменений
# grep "^Max open files" /proc/`cat /var/run/nginx.pid `/limits
Max open files 65536 65536 file
Успешно смягчили ограничение Max open files.
Если не через systemd
Смягчение open files выполняется только через systemd, поэтому если выполнять команды, такие как nginx -t, напрямую, то Max open files не будет смягчен, имейте это в виду.
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: [warn] 4096 worker_connections exceed open file resource limit: 1024
nginx: configuration file /etc/nginx/nginx.conf test is successful