nmtysh.log

Tech系のネタや日々の独り言などを書いています。

Nginx + PHP-FPM で 502 Bad Gateway が時折発生する場合の対処方法

Nginx + PHP-FPM で動かしている環境で 5xx エラーが発生しているようでアクセスログやエラーログを確認してみると 502 Bad Gateway が発生していました。
同じリクエストを投げても 502 になる場合と正常に表示される場合があったので、PHP側の処理の問題ではなさそうです。

PHP-FPM を reload or restart すると事象が解消するためプロセスの暴走が疑われます。
元々メモリリーク対策に pm.max_requests を低い値に設定していたのですが今回の場合は効いていないようです。

このエラーについて調べてみると request_terminate_timeout を設定すると良いようです。

単一のリクエストを処理する際のタイムアウト。この時間を過ぎるとワーカープロセスが kill されます。 このオプションは、'max_execution_time' ini オプションが何らかの理由でスクリプトの実行を止められなかった場合に使われます。 値 '0' は 'Off' を意味します。 使用可能な単位: s(秒)(デフォルト), m(分), h(時間) あるいは d(日)、 デフォルト値: 0
PHP: 設定 - Manual より

max_execution_time で止まらない場合があるんですね。
request_terminate_timeout の設定と PHP-FPM を毎日 restart するようにしてしばらく様子を見たいと思います。

Apache は毎日 restart を入れていたんですけどね。
Nginx + PHP-FPM の構成では油断していました。

環境
関連