ErogameScapeはスマホ用の画面があります。
具体的には/sp/にアクセスするとスマホ用の画面が表示されます。
ユーザーさんから、数日前からスマホ用のサイトにアクセスするとService Temporarily Unavailableになる、と連絡を頂きました。
PC用のサイトはOKとのことです。
PC用のサイトはスマホ用のサイトと同じサーバー(Apache)で動かしています。
ソフトのVerは以下の通りです。
# httpd -v
Server version: Apache/2.4.37 (AlmaLinux)
Server built: Apr 6 2023 13:28:53
# php -v
PHP 8.2.5 (cli) (built: Apr 11 2023 16:16:23) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.2.5, Copyright (c) Zend Technologies
with Zend OPcache v8.2.5, Copyright (c), by Zend Technologies
# php-fpm -v
PHP 8.2.5 (fpm-fcgi) (built: Apr 11 2023 16:16:23)
Copyright (c) The PHP Group
Zend Engine v4.2.5, Copyright (c) Zend Technologies
with Zend OPcache v8.2.5, Copyright (c), by Zend Technologies
PC用のサイトは歴史的な理由から
<IfModule mod_userdir.c>
UserDir public_html
</IfModule>
で設定したディレクトリで動いており、スマホ用のサイトは
Alias /sp /home/ap2/sp/sp
で設定したディレクトリで動いています。
Service Temporarily Unavailableになるということは、PHPが応答を返していないからだと推測しました。
まず、httpdを再起動しましたが状況かわらず。
次に、php-fpmを再起動して回復しました。
以下調査結果です。
そういえばここ数日Logwatchのメールに見慣れないWARINGがあることを思い出しました。
--------------------- Kernel Begin ------------------------
WARNING: Segmentation Faults in these executables
php-fpm : 1437 Time(s)
1437 Time(s): Code: 10 48 63 d2 8b 3c 97 89 78 0c 49 8b 46 10 89 0c 90 41 83 46 1c 01 f6 46 1c 08 74 23 49 8b 47 18 80 78 18 00 74 19 48 8b 46 08 <f6> 40 04 20 74 0f 8b 00 48 8b 95 e0 01 00 00 48 89 34 02 66 90 49
---------------------- Kernel End -------------------------
php-fpmがセグフォしております…
/var/log/messages
を確認しました。
以下のようなメッセージが多数記録されていました。
Apr 19 12:53:31 sakura kernel: php-fpm[3489566]: segfault at fffffffc00000014 ip 00007fbe6df3733b sp 00007ffe316e1940 error
5 in opcache.so[7fbe6df02000+e3000]
Apr 19 12:53:31 sakura kernel: Code: 10 48 63 d2 8b 3c 97 89 78 0c 49 8b 46 10 89 0c 90 41 83 46 1c 01 f6 46 1c 08 74 23 49
8b 47 18 80 78 18 00 74 19 48 8b 46 08 <f6> 40 04 20 74 0f 8b 00 48 8b 95 e0 01 00 00 48 89 34 02 66 90 49
一番最初に上記メッセージが出たところまでたどったところ/var/log/messages
に以下の通り出力されていました。
Apr 19 12:53:01 sakura kernel: httpd invoked oom-killer: gfp_mask=0x6200ca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
Apr 19 12:53:01 sakura kernel: CPU: 0 PID: 3488266 Comm: httpd Kdump: loaded Not tainted 4.18.0-372.32.1.el8_6.x86_64 #1
Apr 19 12:53:01 sakura kernel: Hardware name: FUJITSU PRIMERGY RX1330 M3/D3375-B1, BIOS V5.0.0.11 R1.23.0 for D3375-B1x
04/25/2019
Apr 19 12:53:01 sakura kernel: Call Trace:
Apr 19 12:53:01 sakura kernel: dump_stack+0x41/0x60
Apr 19 12:53:01 sakura kernel: dump_header+0x4a/0x1df
Apr 19 12:53:01 sakura kernel: oom_kill_process.cold.32+0xb/0x10
Apr 19 12:53:01 sakura kernel: out_of_memory+0x1bd/0x4e0
以下略
oom-killerが動いています。
ユーザーさんが無限ループする再帰的なSQLを何回も実行してサーバーの負荷が著しくあがっているタイミングでした。
無限ループする再帰的なSQLの影響でメモリを食いつぶしてoom-killerが動いたのだと思います。
そして理由はわからないですが、このときからphp-fpmのsegfaultがでるようになりました。
不思議なのは/sp/配下のphpにアクセスしたときだけ(おそらく)php-fpmがセグフォして落ちていたと思われる…ということです。
でも、経験上、何かが壊れると自分の想像しない動作をすることがほとんどでしたので…、そういう壊れ方(今回は何かが物理的に壊れたわけではないですが…)もあるんだな、と納得することにしました。
次からはKernelのWARNINGをスルーしないようにいたします。