約 10 分で読めます。
このブログはAWSのLightSail、3.5ドルプランで運用していました。
日本時間の2021/07/21 23時頃、5ドルプランにアップグレードしました。
最近
・Visual Studio Codeでリモート接続すると反応が悪い ・ブログにアクセスしてもタイムアウトになる ・ブログ記事で画像アップロードすると高確率でデータベース接続エラーになる
といったことが多くなったので、原因を調べたらRAMが足りなさそうでした。
そこで、5ドルのプランに変えました。
RAM: 512MB → 1GB
この記事ではそこに至った経緯やプラン変更手順を紹介します。
サクッとやり方だけ知りたい方はこちらから。
経緯
前記の通り、ブログ記事作成時に画像をアップロードすると、高確率で以下画面が出ていました。
もちろん平常時はこんなエラー発生しない。
こんなやつ↓
Error establishing a database connectionと表示される。
他にもブログページの反応が悪くなったり、一番ひどいときは反応がなくなっていました。
↓は反応がなくなっていたときで、PV数がガクっと落ちています。
ブログ運営に無視できない影響が出ているので、解決を試みます。
仮説と検証
このブログではデータベースにmysqlを使っています。
LightSailのWordPressインスタンスで自動的にmysqlが選ばれる。
パッと見思いつくのはmysqldが死んでいることです。
しかし、mysqld自体は生きているようでした。
mysqlのポート(3306)が使われている。
Minimum Available is xxxMB の出力はfree -hで出した。
何度かブログにアクセスしたときがこちら。
MemAvailableが56MBということで、 かなり減りました。
Linuxに詳しい方はご存知と思いますが、Linux Kernelは空きメモリが少なくなるとoom killerが発動し、無作為にプロセスをkillします。
どの程度まで少なくなるとkillされるのか、は(自分が)わかっていませんが、
空きメモリが全体の5%程度になるとoom killerの危険性が高まる
ということは業務経験上知っていました。
今回のLightSailプランですと27MB程度が危険水準。
30MBしか余裕がないのは、心臓に悪いです。
このときはVisual Studio Codeでのリモート接続をしていませんでした。
vscode-serverプロセスの合計利用メモリを確認したら最大で80MB程度使っていました。
このサイトでのスクリプトを参考にさせていただきました。ありがとうございます。
ということは、
先ほどのMemAvailableが56MBの状態でVisual Studio Codeでリモート接続したらアウトです。
Visual Studio Code Remote Developmentを使わずに直接SSH接続してvimなどで開発する手もありますが、自分はvimをそこまで使いこなせないのと、Visual Studio世代なこともあり、Visual Studio Codeは使い続けたい。
ということで、空きメモリを増やすのが必須となりました。
ちなみにps auxやhtopで調べた感じ、以下3プロセスがメモリをよく使っているようでした。
httpd: 最大80MB程度 php-fpm: 最大150MB程度 mysqld: 最大80MB程度
php-fpmとPHPでメモリ関連の設定を見てみました。
php-fpmの設定ファイルを見たらこんな感じ。
sudo cat /opt/bitnami/php/etc/php-fpm.conf (略) pm=ondemand pm.max_children=5
php.iniはこんな感じ。
sudo cat /opt/bitnami/php/etc/php.ini (略) memory_limit = 512M
それぞれ設定を変更してみましたが、当初の目的である
Visual Studio Code Remote Developmentを使いたい
に足りるまでの空きメモリ確保には至りませんでした。
アップグレード手順
ということで、LightSailのプランを5ドルプランにし、メモリ1GBに増やしました。
大雑把に手順は以下の通りです。
移行前インスタンスの停止 移行前インスタンスのスナップショット取得 移行前インスタンスから静的IPアドレスを割当解除 スナップショットから5ドルプランのインスタンス作成 移行前インスタンスで使っていた静的IPアドレスを付け替え 動作確認
移行にかかった時間は全部で30分程度です。
アクセスがあまりこない時間帯(真夜中など)に作業されることをおすすめします。
移行前インスタンスの停止
LightSailの管理ページに行き、インスタンスを停止します。
しばらく待つと停止しますので、そこまで待ちます。
移行前インスタンスのスナップショット取得
再度管理画面に行き、管理を選択。
スナップショットを選択します。
スナップショットの作成を選択します。
スナップショット名に問題なければ作成をクリックすると作成処理が動き出します。
スナップショット作成が終わると、以下の通り確認できます。
思いの外時間がかかります。自分の場合は約10分かかりました。
移行前インスタンスから静的IPアドレスを割当解除
管理画面に移動し、
ネットワーキングに移動し、該当IPアドレスをデタッチします。
こんな警告が出ますが、問題ないので構わずはい、デタッチしますを選びます。
IPアドレスが利用不可になり、無事デタッチされました。
スナップショットから5ドルプランのインスタンス作成
スナップショット右側にある︙をクリックし、新規インスタンスの作成をします。
プランを選びます。
自分は5ドルプランにしました。
インスタンス名を適宜編集し、問題なければインスタンスの作成をします。
インスタンスが作られました。
数秒から1分程度
最近新規作成されるインスタンスはIPv6に対応しているようです。
移行前インスタンスで使っていた静的IPアドレスを5ドルプランに付け替え
先ほどまで使っていた静的IPアドレスを先ほど作ったインスタンスに付けます。
ネットワーキングに移動し、静的IPのアタッチを選びます。
先ほどデタッチした静的IP(↓の画像でStaticip-3)を選んでからアタッチします。
無事IPアドレスがアタッチされました。
赤枠で囲まれている部分にIPアドレスが表示されているはず。
自分は一応新しく作ったインスタンスを再起動しておきました。
動作確認
簡単に動作確認します。
いわゆるスモークテスト( ´ー`)y-~~
ブラウザーでのSSHはOK。
htopで見てみました。
メモリは期待通り増えています。
つかすでに512MB超えている…
ディスク容量も20GBから40GBに増えています。
当たり前ですが、CPUは変わらず1つ。
サイトにも以前と同じくアクセスできています。
JuiceSSHでは
サーバーの公開鍵が変わったけど、これは意図したものかい?
と言われました。
これはインスタンスを変えたことによるものですので、問題ありません。
承認しましょう。
sshコマンドでのSSHでも同様のエラーが出ていますので、対応します。
↑のエラーメッセージで言われたとおり、
ssh-keygen -f <known_hostsのパス> -R <接続先ホスト名 or IPアドレス>
を実行します。
もう一度アクセスし、↓の画面でyesを選ぶとログインできると思います。
1ヶ月様子を見て、問題なければ3.5ドルプランのインスタンスは削除するつもりです。
それまでは一応保持しておきます。
終わりに
いかがでしたか。
少し時間はかかりますが、コマンド入力など難しい部分はないので、ミスすることはないはず!
Comments