awsコマンドでLoadAverageが高騰してEC2にログインできない

Amazon Linuxに30分後にログインできなくなる問題が発生。

サーバの構築自体はAnsibleを使って複数台同じ手順で作っているので、中身は一緒のはず。原因を調べた。 EC2は従量課金なので使えば使うほどお金がかかる。

本番リリースする時は、しっかりスペックを見極める必要があるが、検証段階であれば極力コストを下げたいと思うのが普通だと思う。

私も当然検証であればなるべく安いものを。 ということで作ってる最中だったし、最安値であるt2インスタンスを選択した。 

原因を調べて見ると、サーバ構築後に入れた(厳密にいうとAnsibleで入れた)リソース監視ツールaws-mon-linuxの処理がボトルネックになっているという事がわかった。

https://github.com/moomindani/aws-mon-linux/blob/master/aws-mon.sh#L316 この部分が問題だった。

この監視はcronで毎分動くように設定しており、 前回の処理が終わらずに次の処理が走り、また終わらず、終わらず、最終的に大量のプロセスが溜まっていた。

とりあえず今回は再起動を数回実施。t2は特にAWSのリソースのガチャ状態になる。 つまり、安いが故に利用するユーザーがあまりに多すぎて(しかもそのほとんどは処理が終わったら消していると思う) こちらの監視スクリプトすらも遅くなる。

対応としては複数回再起動を行い、安定しそうだったらそこでやめた。 3回ほど再起動したところでリソース的に問題ない状態になった。 

この問題は忘れた頃にやってくる。 きっとAWS使い始める人のほとんどが引っかかるポイントだと思う。