はじめに
t2.nanoなインスタンスが「なにもしてない」のにヘルスチェックが落ちてSSHでつなげなくなりました。
「なにもしてないのに壊れた」というよりも
「なんにもしてないから壊れた」の方が正しいかもしれません。
貧弱なインスタンスは面倒見てあげる必要があるんですね。
現象
t2.nanoなAmazon Linuxを立ち上げて1週間くらいたったとき、
SSHでインスタンスに接続できなくなり、AWSコンソールで確認するとインスタンスのステータスチェックでエラーが発生していました。
このインスタンスにはアプリケーションなどをほとんど入れていない状態なので、
インストールしたアプリケーションが何か悪さをしたわけではないさそうです。
システムログを見た感じだとsshdがメモリ不足で殺されていたので、それが原因だと考えられます。
(sshdとは、sshで接続を受けるために必要なサーバ側のプログラムです。)
t2.nanoのメモリは0.5GBであり、
普通にしてると空メモリは100MBくらいありますが、
EC2のインスタンスのSSHはブルートフォースアタックを受けるので、それでSSHのメモリ使用量が増えたのかな? と予想。
[1705026.349903] Out of memory: Kill process 11606 (sshd) score 3 or sacrifice child
そんなわけで、再発防止案としては以下の4つを思いつきました。
- スワップ領域を追加し、メモリ不足を緩和する
- インスタンスタイプを上げる
- (メモリ使用量増加がSSHブルートフォースアタックが原因だとしたら)SSHのポートを変更する
- IPアドレス制限をする
など考えられましたが、基本的なところとして、スワップ追加を実施しました。
お金に余裕があるなら、インスタンスタイプをあげればいいと思います。
スワップ追加で本当にsshdが落ちないか、(それによってヘルスチェックが落ちないか)は、まだ未検証です。
まあ、設定してから4日くらい経ってますが、いまのところは大丈夫なかんじです。
システムログの見方
あれ?なんかSSH繋がんないし、インスタンスのステータスチェックでエラーになってるなと思ったら、システムログを見ましょう
[1705026.349903] Out of memory: Kill process 11606 (sshd) score 3 or sacrifice child
こんなエラーがあれば、それはsshdがシステムによってkillされてます。
設定の仕方
AWSのリファレンスを参考に設定しました。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-memory-swap-file/
EC2のインスタンスにログインする
SSH繋がんない状態だとSSHでログインできないので、
インスタンスの再起動をしましょう。多分、SSHできるようになります。
再起動してSSHが繋がらないようであれば、きっとメモリ不足とかではなく別の問題です。
SWAP領域を作成する
スワップ領域のサイズですが、もとのメモリ容量が0.5GBなので、
1GB程度あれば十分かなと思います。
dd コマンドを使用してルートファイルシステムにスワップファイルを作成します。
「bs」はブロックサイズ、「count」はブロック数です。この例で、スワップファイルは 1 GB です。
$ sudo dd if=/dev/zero of=/swapfile bs=100MB count=10
※bsがデカすぎるとメモリ不足になるので、メモリ不足なら、bsを小さくしてcountの数を増やしましょう
スワップファイルの読み書きのアクセス許可を更新します。
$ chmod 600 /swapfile
Linux スワップ領域のセットアップ:
$ mkswap /swapfile
スワップ領域にスワップファイルを追加して、スワップファイルを即座に使用できるようにします。
$ swapon /swapfile
手順が正常に完了したことを確認します。
$ swapon -s
こんな感じに表示されるはず
ファイル名 タイプ サイズ 使用済み 優先順位
/swapfile file 976556 512 -2
/etc/fstab ファイルを編集して、起動時にスワップファイルを有効にします。
$ vi /etc/fstab
$ /swapfile swap swap defaults 0 0
メモリが増えてることを確認する。
$ free -h
-h
はちょうどいい感じで数字の表示をギガとかメガとかにしてくれるオプション
total used free shared buff/cache available
Mem: 479M 56M 100M 144K 322M 398M
Swap: 953M 512K 953M
はい、Swapに953MB追加されてますね。
なぜ1000MBじゃないかって?
たぶんメガバイト表示であってメビバイト表示ではないからです。
まとめ
t2.nanoなインスタンスのステータスチェックがいつの間にか落ちてるしSSHが繋がらなかったら
システムログみてメモリ不足が発生していることを確認して
もしそうだったら
スワップ領域を追加する。
以上です。