CentOS 7上のNginxが「Too many open files」で止まった時の対処方法

CentOS 7上のNginxが「Too many open files」で止まった時の対処方法

CentOS 7で、Nginxを使ったWebサイトを運営している場合、サイトの規模が大きくなったときに「Too many open files」というエラーでNginxが停止してしまうことがあります。

これは、Nginxで一つのworkerプロセスが開くことできるファイル数に制限があるためです。

そこでここでは、この制限を緩和する手順について紹介します。

Max open filesの制限値を緩和する

現状の設定値を確認する

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

あとがき

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