systemdで特定のデーモンのMax open filesを緩和する
サーバ
Published: 2016-04-02

Qiitaから移動させたコンテンツです。

nginxなどでMax open filesなどを緩和させたい時があります。

CentOS7以前はsystemdではなかったためlimits.confを修正したりしていましたが、 systemdではもっとシンプルに対応できるようです。

例としてnginxで困ったと想定しています。

現状の確認

# grep "^Max open files" /proc/`cat /var/run/nginx.pid `/limits
Max open files            1024                 4096                 files 

現状だとハードリミットの4096以上は1プロセスでファイルを開くことができず、 worker_connectionsのチューニングやキャッシュなどで大量のファイルをnginxが 操作する場合には足りなくなることが多々あります。

設定の変更

# 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経由以外だと

systemd経由の場合のみ open files の緩和がされるため、 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