EC2 instance type をよく理解していなくてハマった

AWS

最近は AWS を触っています。 EC2 を使って Elasticsearch クラスタを構築していたのですが、手探り状態のままいきなり大きなインスタンスで構築し始めるのは勿体無いと考え、t2.micro インスタンスを使って作業をしていました。 ソフトウェアのインストールや設定なども無事終了し、検索用クラスタが動作できる状態になったので、試しにドキュメントを追加していました。

ドキュメント追加中はそれなりに CPU 負荷がかかるのですが、しばらく処理を続けていると CPU 使用率が下がり、ドキュメントのインデキシング性能が出ないという現象が発生しました。

グラフを確認すると、80% 程だった使用率が 20% 程までに落ちています。なぜでしょう。 会社の同期に「T2インスタンス使ってるでしょ」と言われ原因がわかりました。

T2 インスタンスと CPU クレジット

t2.micro インスタンスについては**「性能は高くないが、その分安くてしかも無料枠の対象のインスタンス」**ぐらいの認識しかありませんでしたがこれは大きな間違いでした。

T2 インスタンス - Amazon Elastic Compute Cloud

ドキュメントを確認したところ、T2 インスタンスには バースト機能 と呼ばれるものを備えているようでした。ベースライン性能と呼ばれる、ある一定の性能が最低限出るようになっており、大きな負荷がかかる場合にはバーストし、ベースライン性能を超えて性能を出すことができるとのことです。 どのぐらいバーストできるかは CPU クレジット を消費するまで使い続けられるようです。 詳細はドキュメントを参照してください。

EC2 Management Console でインスタンスを選択すると CloudWatch のグラフを確認することができます。T2 インスタンスの場合、CPU 使用率のほか CPU クレジット使用状況・CPUクレジット残高 のグラフが存在するようなので確認してみました。

CPU 使用率と CPU クレジット使用状況のグラフの形が一致しています。また、それらのグラフのラインの上下に合わせて CPU クレジット残高が少なくなっていることも確認できます。 今回の CPU 使用率の低下の原因は、CPU クレジットを消費してしまい、t2.micro のベースライン性能にまで CPU 性能が制限されてしまったことが原因でした。

sar コマンドでクレジット消費時の CPU 使用率を確認してみる

$ sar -u -f /var/log/sa/sa24
Linux 4.4.10-22.54.amzn1.x86_64 (elasticsearch-prd-01)  2016年05月24日  _x86_64_        (1 CPU)

19時00分36秒       LINUX RESTART

19時10分01秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
19時20分01秒     all      4.61      0.00      0.45      0.12      0.02     94.81
19時30分01秒     all     38.59      0.00      1.16      0.75      0.03     59.47
19時40分01秒     all     69.04      0.00      2.33      1.91      0.04     26.68
19時50分01秒     all     68.04      0.41      3.05      2.36      0.06     26.07
20時00分02秒     all     66.78      0.00      2.53      2.26      0.11     28.32
20時10分01秒     all     69.80      0.00      2.72      2.28      0.10     25.11
20時20分01秒     all     49.70      0.00      1.97      2.13      0.13     46.07
20時30分01秒     all     15.39      0.00      0.75      0.54      5.37     77.95
20時40分01秒     all     12.36      0.00      0.64      0.65      5.77     80.59
20時50分01秒     all      9.81      0.00      0.52      0.29      4.83     84.55
21時00分02秒     all     11.43      0.00      0.60      0.36      5.13     82.47
21時10分01秒     all     10.52      0.00      0.52      0.32      4.66     83.97
平均値:      all     35.24      0.03      1.43      1.16      2.22     59.92

20時台で steal の値が増えていることがわかります。steal は仮想環境でゲスト OS が CPU リソース要求を行ったにもかかわらず、ホストにリソースを割り当ててもらえなかった時間の割合を表した値です。steal の値が増えている時刻は、グラフで CPU 使用率の低下が見られた時刻とおおよそ一致していますね。


comments powered by Disqus