1 はじめに
PHP を Apache モジュールから Fpm に変更し、数日実行したところ、突然 Web サイトが開けなくなることに気づきました。
ページ表示がタイムアウトする MySQL および Redis サービスが正常であることを確認してください。
Fpm コンテナーに入ってログを表示すると、次のエラー メッセージが表示されます。
サーバーが pm.max_children 設定 (5) に達したため、値を上げることを検討してください
2. 理由
デフォルトでは、Fpm のシステム パラメーターは次のとおりであることがわかります。
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 3
これらのパラメータについて説明します。
max_children
最大プロセス数
start_servers
起動時に起動されるプロセスの数
min_spare_servers
アイドルプロセスの最小数
max_spare_servers
アイドルプロセスの最大数
最大 5 つのプロセスでは明らかに十分ではありません。
3.解決する
システムのクラッシュを避けるために、子プロセスの数を増やしてください。
平均して、プロセスは約 35M のメモリを占有します。コンテナによって割り当てられるメモリは 1G (1024/35=29) です。メモリ不足を避けるには、より小さい数値 (ちょうど 25) を設定してください。
pm.max_children = 25
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 25
さらに、max_requests パラメータを使用して、システムのクラッシュを避けるために、特定の数のサービスの後にプロセスを再起動することもできます。
max_requests パラメータは比較的理解しやすく、何度もサービスを提供した後でプロセスが自動的に破棄され、その後システムが他のパラメータに基づいてプロセスを自動的に補充することを意味します。
これにはアルゴリズムはありませんが、サーバーへのアクセス数が多い場合は大きく、サーバーへのアクセス数が少ない場合は小さく設定してください。
pm.max_requests = 600