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