Смягчение ограничения Max open files для определенного демона в systemd
сервер
Published: 2016-04-02

Контент был перемещен из 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