このエントリーをはてなブックマークに追加

EC2 t2.micro上のWPが良く落ちる場合の設定【mysqlは弄るな!】

本ブログはAWSのEC2 t2.microインスタンスにて公開しています。

そのうえで、wordpressを使用して編集、公開をしていますが、最近Webサーバが落ちることが頻発しました。

 

原因

原因は簡単です。

設定の不備とスペック不足です、

t2.microインスタンスはcpu1コア, RAM1GBとスペック的にはあまり余裕のあるものではありませんが、これまで特に設定変更をせずにデフォルト設定で運用してきました。

これにいろいろなWPプラグインを導入したり、画像などの増加、アクセスの増加が重なり、今回ついに限界に達したといった形です。

 

対策

Mysqlの設定

Mysqlの接続上限数はデフォルトでは100ですが、これを10に変更しました。

設定方法は以下です。

/var/my.cofを以下の通り編集

[mysqld]

max_connections = 10

初期のmy.cofでは設定の記載がないため追記します。

これによって、1GB中900MBほど常時使用されていたメモリが300MBほど解放されました。

 

【以下2019年3月25日加筆】

mysqlの接続制限をかけることで1週間ほどして異常が頻発しました。

症状としてはApacheプロセスの異常起動とサイトアクセスへの著しい遅延です。

これによりすぐにメモリリークが発生してhttpdが落ちる状態となりました。

Mysqlへの制限はかけない方が良く、メインはApacheの設定で行うのが最適です。

 

httpd.confの設定

一応httpd.conf側でも無駄にメモリを食わないように制限をかけるように設定を記載しました。

 

<IfModule prefork.c>

StartServers       8

MinSpareServers    5

MaxSpareServers    10

ServerLimit      13

MaxClients       13

MaxRequestsPerChild  4000

</IfModule>

 

httpd.confに上記の設定に修正(<IfModule prefork.c>以下の記述があれば修正)or追記

ただしこれはpreforkでプロセス制御をかけている場合に有効です。

$ apachectl -V

を実行して

Server MPMがpreforkになっている場合に有効です。

このうち、MaxSpareServersが起動できる待ち受けプロセス数、MaxClientsが起動可能なプロセス上限になります。

この設定では一時的な大量のアクセスはさばけなくなりますが、安定性は向上します。

MaxClientsとServerLimitは同値で、サーバスペックにあわせて算出します。

T2.microでWordPressのみを公開しているWebサーバであればこのくらいが安定範囲かとあたりを付けて設定。

この状態で

$ps aux

を実行してApatcheプロセス数が設定どおりになっているか確認。

あわせて、

$free

で使用中メモリ量を確認しつつチューニングしました。

これにて落ちなくなったので様子を見ています。

アクセス数が多くなった場合はこの設定では厳しくなるかもしれないため、状況に合わせて設定の調整を検討します。

 

SWAP領域の作成

メモリ使用量が一時的に増加した時に対応するべくSWAP領域の作成を行いました。

これによって、すぐにhttpdとmysqldがkillされるのを防ぎます。

$ dd if=/dev/zero of=/swapfile bs=1M count=1024

1GBの空ファイルを作成

$ chmod 600 /swapfile

パーミッション設定

$ mkswap /swapfile

初期化

$ swapon /swapfile

マウント

上記コマンドにて1Gのスワップ領域の作成と割り当てが完了します。

SWAPがうまいことあたっているか、メモリの使用状況はどうかを確認するため、適用後はfreeコマンドを定期的にたたいて確認しました。

下記はSWAPを作成しただけのときのfreeコマンドの結果です。

この例(SWAP設定直後)ではusedが930MBもありすでにメモリがもうカツカツでした。

 

$ freetotal       used       free     shared    buffers     cached

Mem:       1017296     930024      87272         24       3116      37152

-/+ buffers/cache:     889756     127540

Swap:      1048572      0     1048572

 

まとめ

EC2のt2.microインスタンスを使用している場合、思いのほかメモリリークによる不具合が発生しました。

それに対する一番の対策はhttpdを設定してそもそもメモリリークを起こすほどのプロセス起動を抑制することにたどり着きました。

これにより、現状では1日200PV程度のブログ運営はさばけています。

どこまでこれで行けるのかは、今後のPV数増加と合わせて変化を観察していく過程でわかると思います。

 

追記2019年6月

設定後2か月以上運用していますが、安定して動作しておりhttpd、mysqldが落ちることもなくなりました。

人気記事

  1. 屋号がなくても大丈夫!モノタロウを個人で使う
    屋号がなくても大丈夫!モノタロウを個人で使う
  2. 動きを止めてその場で駆除! ゴキブリ駆除の必殺兵器 パーツクリーナ―
    動きを止めてその場で駆除! ゴキブリ駆除の必殺兵器 パーツクリーナ―
  3. 撮影予定
  4. アニメ監督紹介 森脇真琴監督
    アニメ監督紹介 森脇真琴監督
  5. モノタロウの便利なクーポンと納期の注意点
    モノタロウの便利なクーポンと納期の注意点
  6. おすすめの傑作アニメ感想 カレイドスター
    おすすめの傑作アニメ感想 カレイドスター
  7. スタジオ撮影で必要になる最低限の機材
  8. EC2 t2.micro上のWPが良く落ちる場合の設定【mysqlは弄るな!】
    EC2 t2.micro上のWPが良く落ちる場合の設定【mysqlは弄るな!】
  9. カオスギャグアニメ感想 プリパラ
    カオスギャグアニメ感想 プリパラ
  10. 優秀なサイバーセキュリティ人材を求めるならこれを肝に銘じろ!
    優秀なサイバーセキュリティ人材を求めるならこれを肝に銘じろ!

このエントリーをはてなブックマークに追加

コメントを残す

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