運営してたらいつの間にかサイトが死んでたのでその調査と対応について記録
仕事から帰宅してサイト確認してみると応答がなく、ssh ログインもできない状態だったので、いったんインスタンスを再起動
今一度サイト立ち上げを実施して諸々調査。起動してしばらく放置してるだけでみるみるメモリが減ってた。アクセスほぼなしで3分の2が使用済みか。
$ free -h total used free shared buffers cached Mem: 985M 662M 323M 72K 25M 476M -/+ buffers/cache: 160M 824M Swap: 0B 0B 0B
メモリ消費量の多いプロセスを確認するとphp-fpmのプロセスが上位に来る
$ ps aux | sort -n -k 6 -r | head -n 10 mysql 3917 0.0 5.0 616528 51456 pts/0 Sl 22:56 0:00 /usr/libexec/mysql55/mysqld ******** apache 3656 0.0 3.8 378628 39344 ? S 22:55 0:00 php-fpm: pool www apache 3657 0.0 3.4 446920 34964 ? S 22:55 0:00 php-fpm: pool www apache 3658 0.0 1.4 355300 14236 ? S 22:55 0:00 php-fpm: pool www root 3653 0.0 1.1 355148 11312 ? Ss 22:55 0:00 php-fpm: master process (/etc/php-fpm.conf) apache 3982 0.0 0.9 355148 9864 ? S 23:02 0:00 php-fpm: pool www apache 3659 0.0 0.9 355148 9864 ? S 22:55 0:00 php-fpm: pool www apache 3655 0.0 0.9 355148 9864 ? S 22:55 0:00 php-fpm: pool www root 3196 0.0 0.7 117896 7404 ? Ss 22:13 0:00 sshd: joda [priv] nginx 3354 0.0 0.6 60992 6272 ? S 22:14 0:00 nginx: worker process
swap領域を作るという事も考えたが、diskI/Oで料金取られることも考えると、一旦プロセス数を下げるといったスリム化をして対応したほうが良さそう。同時アクセスとかもそんなないやろうし。
設定変更したファイルは /etc/php-fpm-7.3.d/www.conf
変更差分は以下
-pm.max_children = 50 +pm.max_children = 5 # 最大稼働する子プロセスの削減 -pm.start_servers = 5 +pm.start_servers = 3 # 起動時に立ち上がるプロセス数の削減 -pm.min_spare_servers = 5 +pm.min_spare_servers = 2 # 暇なときに立ち上げるプロセスの最小値 -pm.max_spare_servers = 35 +pm.max_spare_servers = 3 # 暇なときに立ち上げるプロセスの最大値
上記変更をして php-fpm 再起動したあとのメモリ利用上位確認
$ ps aux | sort -n -k 6 -r | head -n 10 mysql 3917 0.0 5.3 747864 53636 pts/0 Sl 22:56 0:01 /usr/libexec/mysql55/mysqld ******** apache 4184 0.2 5.0 463572 51152 ? S 23:36 0:02 php-fpm: pool www apache 4218 0.2 4.8 461480 48660 ? S 23:46 0:00 php-fpm: pool www apache 4228 0.4 2.8 368208 28996 ? S 23:51 0:00 php-fpm: pool www root 4135 0.0 1.1 355096 11232 ? Ss 23:30 0:00 php-fpm: master process (/etc/php-fpm.conf) root 3196 0.0 0.7 117896 7404 ? Ss 22:13 0:00 sshd: *** nginx 3354 0.0 0.6 60992 6272 ? S 22:14 0:00 nginx: worker process ntp 2749 0.0 0.5 116436 5496 ? Ssl 22:13 0:00 ntpd *** joda 3212 0.0 0.4 118028 4576 ? S 22:13 0:00 sshd: *** root 3033 0.0 0.4 89556 4468 ? Ss 22:13 0:00 sendmail: ***
起動している php-fpm のプロセス数が減っていることを確認
この作業をしても誰かがサイトを訪れていると使用中のメモリが結構上がるのでまだ別の対応が必要と思われる。以下はこの投稿の編集中のメモリの様子
$ free -h total used free shared buffers cached Mem: 985M 708M 277M 72K 29M 481M -/+ buffers/cache: 197M 788M Swap: 0B 0B 0B
mysql の外出しとか、分散とかいりそうやなぁ。。。