AWS EC2 WordPress Nginx 環境のOOM対策(その1)

運営してたらいつの間にかサイトが死んでたのでその調査と対応について記録

仕事から帰宅してサイト確認してみると応答がなく、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 の外出しとか、分散とかいりそうやなぁ。。。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です