susukinosu

エンジニアリングって、何だよ

WordPressのWebサイトがデータベース接続確立エラーを出したとき

t2.microでWordPressを動かすつらみ、わかる?

nginx + WordPressとかいうナウくて(?)イケイケ(?)な構成を試した時の覚書
静的ページしか必要ないならStaticPress + S3でいいじゃん……というのはわかった上で

t2.microというところでだいたい察すると思うが、先に結論を言っておくとメモリ枯渇のお話

構成

めちゃくちゃざっくり表すとこんな感じ
f:id:tkscotte:20180420005202p:plain

問題

WordPressで作成したWebサイトを見ていると、ランダムに「データベース接続確立エラー」が発生する

原因

php-fpmの設定がデフォルトのままだった
そのため、php-fpmの子プロセスが増え続け、インスタンスがメモリ枯渇を起こしていた
なお、 t2インスタンスにはswap領域が無い

調査

  • WordPressのDB設定を再確認
  • nginxのログ( access.log および error.log )を確認
  • /var/log/messages を確認

対応

  1. /var/log/messages を確認 -> パイプで繋げて grep -i "Out of memory" と検索すると楽
  2. top コマンド実行後、 Shift + mキーでメモリ使用率が高いプロセスごとにソート -> ここでメモリ使用率が高いサービスのプロセス数確認
  3. ps aux | grep -i "php-fpm" -> 今回の事例ではphp-fpmの子プロセス数が多かったので個数確認

ここでphp-fpmの子プロセスが40個ほどまで増殖していたのが判明

/etc/php-fpm.d/www.conf の設定を変更する

;pm = dynamic
pm = static

;pm.max_children = 50
pm.max_children = 10

あくまで「誰も見ないような規模のWebサイト」の設定なので、状況に合わせて数値を変動させる必要がある

雑感

デフォルトの設定のままにするな
せめて t2.small にしよう

追記
仕事終わりに雑談に付き合ってくれるお姉さんにめぐりあいたい……めぐりあいたくない?