【AWS】Amazon Lightsailのインスタンスが落ちまくるのでなんとかしたい

スポンサーリンク

WordPressを操作していると落ちることが頻発

このブログはAWSのAmazon Lightsailという仮想サーバを使っています。(以前も引っ越し・設定の記事を書きました)

このAmazon Lightsaiですが、わりとクセがある仕様で設定に苦労していました。

なんとか使っていましたが、引っ越して1ヶ月経ったくらいからWordPressの管理画面でページ遷移するとサーバの応答がなくなることが多発し始めました。

サーバを再起動させればとりあえず復帰はするのですが、さすがにまずいと思い対処法を探してみました。

原因はインスタンスのメモリ不足らしい

「Lightsail 落ちる」で検索してみると同じ現象に悩まされているブログがいくつか見つかりました。

LightsailのWordPressは3.5ドルプランだと落ちまくる件 - MasaruのIT&マーケティングBLOG | Info Tech & Marketing BLOG by Masaru
メンテナンスのたびにサイトが落ちる 無職の私は、生活のために100円でも出費を切り詰めなければなりません。W

特に気になったのはこの記事。
自分もプランは一番安い月額3.5ドルのプランなので同じです。

記事によるとLightsailの3.5ドルのプランはメモリが512MBしかないのでメモリが足りず落ちる可能性があるとのこと。

そんなにアクセスがあるブログではないので最小構成で良いかなと考えてましたがダメみたいですね。

インスタンスのプランを3.5ドルから5ドルのものへ変更

せっかくなので自分もプランを1段階上げてみることにしました。
3.5ドルが5ドルなので差額は1.5ドル。そんなに負担ではないですからね。

先程の記事を参考にスナップショットから新規インスタンス作成を行いました。

LightsailのWordPressは3.5ドルプランだと落ちまくる件 - MasaruのIT&マーケティングBLOG | Info Tech & Marketing BLOG by Masaru
メンテナンスのたびにサイトが落ちる 無職の私は、生活のために100円でも出費を切り詰めなければなりません。W

サイトがちゃんと移行できたのを確認し静的IPアドレスを付け替え。
あとRoute53のホストゾーンのレコードの設定でAAAAレコードのIPv6を新しいインスタンスのものに変更しました。

これで大丈夫かなと思ってましたが……

まだ前と同じようにサーバが落ちる

サーバのプランをアップグレードしましたがまだ前と同じように管理画面の画面遷移で落ちました

1回ならともかく度々(1週間に1度くらいの頻度)落ちるのでスペックが原因ではないかもしれない……。
というわけで原因を調べることに。最初っからやっておけばよかったですね。

落ちたときのログが残っていない

エラーログは途中で切れてて落ちた直接的な原因は不明でした。
MySQLがメモリ不足で落ちたのかもしれませんがMySQLのログの場所がわからずで原因を特定できません。

今現在のメモリの空きは1GB中120MBくらい。そんなに余裕はなさそうです。
Swapは640MBで作られていました。

スクリプトのエラーも探ってみましたが落ちた時刻でのエラーはありませんでした。

わからないことがわかったのでLightsailで落ちる対策をしているブログ記事を探しました。

対策① Swap領域を640MBから4GBに増やす

調べて見つけた記事はこちら。

Apache+WordPress サーバーが落ちるので定期的に再起動させてみた | JI0VWLのFreakな日常
MySQLが落ちるのでswapの設定
AWSのlightsailでMySQLがいきなり落ち、ログを見てみると次のように記述されていました。 InnoDB initialization has started. mmap(137428992 bytes) failed; errno 12 Cannot allocate memory for the b...
[Lightsail]メモリ不足でSwapを確保したよ[Amazon Linux] | 苔茎科テラリウム

Swap領域を増やしている記事が多かったのでそれに習って増やすことにしました。
640MBから4GBにします。

$ sudo -i
# df -m
(HDD容量を確認)
# swapon -s
(swapファイルの場所とサイズを確認)
Filename                                Type            Size    Used    Priority
/mnt/.bitnami.swap                      file            649996  256     -2

# swapoff /mnt/.bitnami.swap
# rm /mnt/.bitnami.swap
# dd if=/dev/zero of=/mnt/.bitnami.swap bs=1M count=4096
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 64.7038 s, 66.4 MB/s

# chmod 600 /mnt/.bitnami.swap
# mkswap /mnt/.bitnami.swap
Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
no label, UUID=6f56bda0-4821-4aa3-bdb5-1fc4ac264bb2
# swapon /mnt/.bitnami.swap

# free -h
              total        used        free      shared  buff/cache   available
Mem:          987Mi       337Mi        92Mi        51Mi       557Mi       453Mi
Swap:         4.0Gi       0.0Ki       4.0Gi

# echo "/mnt/.bitnami.swap swap swap defaults 0 0" >> /etc/
fstab

Swap領域が増え、またサーバ起動時にSwapファイルを指定しました。
サーバを再起動させ確認し、再起動後もちゃんとSwap領域が増えていることを確認しました。

対策② Lightsailのアラームを設定

前に1回管理画面以外でサーバが落ちていた時があり、サーバが落ちていることに気づかないことがありました。
少しでも早く気づけるようにLightsailのメトリクスからサーバ異常時にメールを飛ばすようアラームの設定をしました。

アラームは「CPU使用率」と「ステータスチェックの失敗」にセットしました。

CPU使用率は
「CPU 使用率 が、過去 20 分 以内に 2 回 の 次を超過、または次に等しい: 10% であるときに通知」
に設定。
20分でCPU使用率が10%を超えた回数が2回以上のときにメールを飛ばします

ステータスチェックの失敗は
「ステータスチェックの失敗 が、過去 5 分 以内に 1 回 の 次を超過: 0 failures であるときに通知」
に設定しました。
ステータスチェックでFailしたらすぐメールを飛ばします

テストも行い正常に動作するのを確認しました。

対策③ サーバが落ちていたら自動的に復帰するようにする

この記事にサーバが落ちている時に自動的に復帰するスクリプトが書かれてましたので真似してみました。

[Lightsail]httpdの応答を定期的チェックしてステータスコード200じゃなかったらとりあえず再起動する | 徒労日記
また止まってました徒労日記。 Whyなぜに。 とりあえず回避策としてタイトル通りの予防線を貼ろうと思います。

自分のアドレスのステータスコードをcurlで確認し、200でなければ「/opt/bitnami/ctlscript.sh restart」でサービスを再起動するスクリプトでした。

スクリプトのurlを自分のドメインに変更するだけでよさそうです。
それを置いてcronで30分おきに実行させます。
出力結果は/var/log/messagesに出力されるので確認。

とりあえず様子見

根本的な解決はできてないですが一応の対策はしてみました。
Swap領域を増やしてからは落ちてないですが落ちる可能性は高いままなので様子見ですかね。

また落ちまくって困ったら調べて解決法探します。

コメント