やっぱりbcacheはonにした。botに耐えれずサイトが落ちたため『PHP-FPM設定』

WordPress

【技術メモ】2025年11月3日 障害対応記録
WordPress(KUSANAGI9 + nginx129 + PHP-FPM8.1)応答停止事案

1. 概要

2025年11月3日 16:54 頃、UptimeRobot により サイトの 応答停止を検知。
該当時刻にアクセスログ上で 503 エラーが集中し、約1時間以上サイトが実質ダウン状態となった。

物理的なサーバーダウンではなく、PHP-FPM の処理上限到達(pm.max_children枯渇)による応答不能が原因。
後に管理者による手動再起動(KAGOYAコントロールパネル経由)により復旧した。

2. 発生環境

OS:CentOS Stream 9
Webサーバ:nginx129(KUSANAGI9標準)
PHP:8.1(php-fpm)
メモリ:3.6GB
キャッシュ:fcache有効・bcache無効(当時)
PHP-FPM設定(当時):
pm.max_children = 8
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4

3. 発生経緯(時系列)

16:45頃 Bingbot(40.77.x.x / 52.167.x.x 系IP)を中心に /?s= 検索クエリが急増
16:45〜17:00 ssl_access.log に 503 応答が毎分約100件前後記録
16:50前後 PHP-FPM が上限8プロセスに到達(error.logに server reached pm.max_children (8))
16:54 UptimeRobot により応答停止検知(HTTP 503)
16:55〜18:00 応答不能状態が継続。nginxは稼働中だがPHP層が応答不可。
18:20頃 管理者が KAGOYA 管理画面からサーバーを手動再起動。
18:30頃 php-fpm / nginx 再起動後、正常復旧を確認。

4. 原因分析

(1) bcache無効

PHP実行結果キャッシュが無効化され、全アクセスがPHP層に到達。
fcacheは静的HTMLをキャッシュするが、/?s=, /feed/, /wp-json/ は非対象。

(2) pm.max_children の過小設定

同時8件の処理上限を超過し、リクエストがキューできず503即応。
botアクセスが一瞬で処理枠を埋め、一般ユーザーも巻き添え。

(3) botアクセスの性質

Bingbot / AhrefsBot / SemrushBot は「no-cacheヘッダ」を送信し、キャッシュを強制バイパス。
キャッシュ層を迂回して毎回PHPを叩くため、正規botでもDoS的負荷を与える構造。

5. 対処内容

PHP-FPM調整:
pm.max_children = 36
pm.start_servers = 6
pm.min_spare_servers = 4
pm.max_spare_servers = 8

bcache再有効化:

kusanagi bcache on → systemctl restart php-fpm → kusanagi nginx --reload

fcache維持:TTL 60分・inactive 120分のまま維持
再起動:KAGOYA 管理画面よりサーバー再起動(18:20頃)
監視強化:/var/opt/kusanagi/log/php-fpm/error.log を監視対象に追加

6. 再発防止策

(1) キャッシュ多層構成の維持

fcache+bcache併用を基本とし、更新時のみ一時的に bcache をOFF。(現状onだとなぜか子サイト最新記事のOGPが死ぬため)

(2) 早期検知

pm.max_children reached をトリガーにSlack通知・再起動スクリプト連携を検討。
nginxログの503増加をモニタリング指標に追加。

7. 現行安定構成(2025-11-03 19:40以降)

bcache:ON
fcache:ON
pm.max_children:36
メモリ使用量:約3.0〜3.2GB
同時接続耐性:2000〜3000人(キャッシュHIT時)/1000人前後(MISS時も耐性)
状態:安定稼働中(再起動後監視継続)

8. まとめ

障害原因:キャッシュ層無効 + PHP-FPM過小設定 + bot直撃
復旧方法:管理者によるKAGOYAコンソール再起動
恒久対策:bcache常時ON + pm.max_children=36体制 + botレート制限

結論:

今回のダウンは「bcacheオフの8体制がbotアクセスで破綻」した結果であり、36体制+bcache併用により安定稼働を回復。

bot制御を導入すれば、今後同規模アクセスでも落ちないサーバー運用が可能。

コメント

タイトルとURLをコピーしました