CentOS7:Nginxが「Too many open files」で止まった時の対処方法

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です。

まとめ

エラーが出てから対応しても良いですが、あらかじめ制限値を緩和しておけばサイトが止まるリスクを減らせますね。

スポンサーリンク