CentOS7のNginxでWebサイトを運営している場合、サイトの規模が大きくなったときにNginxが「Too many open files」というエラーで止まる場合があります。
これは、Nginxで一つのworkerプロセスが開くことできるファイル数に制限があるためです。
そこで、ここではこの制限を緩和する手順について紹介します。
手順
現状確認
Nginxのworkerプロセス番号から「Max open files」の制限値を調べます。
# ps axf | grep nginx
・・・
120161 ? S 0:02 \_ nginx: worker process
# cat /proc/120161/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 15543 15543 processes
Max open files 1024 4096 files
・・・
上の通り、現状の「Max open files」の制限値では、1プロセスでハードリミットの4096以上はファイルを開くことができないことがわかります。
設定変更
そこで、この制限値を以下の手順で変更します。
まずは、設定ファイルを作成します。
# mkdir /etc/systemd/system/nginx.service.d
# vi /etc/systemd/system/nginx.service.d/limit.conf
[Service]
LimitNOFILE=32768
上で作成した設定ファイルを反映させます。
# systemctl daemon-reload
# systemctl restart nginx
設定の反映確認
設定変更後、設定が反映されているか先ほどと同じ手順で確認します。
# ps axf | grep nginx
・・・
221848 ? S 0:02 \_ nginx: worker process
# cat /proc/221848/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 15543 15543 processes
Max open files 32768 32768 files
・・・
設定した制限値になっていればOKです。
あとがき
エラーが出てから対応しても良いですが、あらかじめ制限値を緩和しておけばサイトが止まるリスクを減らせますね。