はじめに
EC2のインスタンス上で画像処理をする機能を社内用に提供していました。
ところが、変換するのに通常より時間がかかってくるとの声が上がってきました。
しかも、午前中は大丈夫だが、午後になると遅くなって使い物にならなくなるとのこと。
調査してみると、CPUクレジットが枯渇していることが原因となっているようでした。
CPUクレジットとは何か、なぜ午後に遅くなってしまったのかをまとめます。
まずは調査
CPUクレジット残高を見てみると、遅いと言われている時間に0になっていることがわかりました。
その前にCPUクレジットとは何なのでしょうか。
CPUクレジットとは
ここで一旦インスタンスタイプを確認します。今回使用していたインスタンスタイプはt2.micro
でした。
12か月間の無料利用枠の対象にもなっているので、とりあえず選択する方も多いのではないでしょうか。
T2, T3, T3aインスタンスはバースト可能パフォーマンスインスタンスに分類されます
バースト可能パフォーマンスインスタンスとは
バースト可能パフォーマンスインスタンスには、ベースラインがインスタンスタイプ毎に設定されています。
例えば、t2.micro
ではvCPUは1で、**ベースラインは10%**になります。
普段はベースラインでのパフォーマンスを提供するが、必要なときにはベースラインを超えて提供してもらえます。
ここでベースラインを超えて提供してもらえる時間を管理しているのが、CPUクレジットになります。
CPU100%で1分間処理するには、CPUクレジットを1払う必要があります。
CPUクレジットは基本的には時間経過によって貯まります。(T2シリーズのみ起動時にも付与されます)
t2.micro
の場合、1時間あたりに6貯まり、最大144まで貯めることが出来ます。
つまりCPUクレジットとは名前の通り本当にお金のようなもので、
ベースラインの10%を超えてCPUを使いたいときは、CPUクレジットを払ってCPUのパフォーマンスを高められます。
しかし、CPUクレジットの残高がなくなってしまった場合は、ベースラインでの動作になります。
今回の私のケースでは、ユーザーが使用しない深夜のうちにCPUクレジットが144の最大まで溜まっていたが、
業務時間になると徐々にCPUクレジットを消費し、午後にはCPUクレジットの残高が0になってしまいました。
CPUクレジットの残高が0になったことで、CPUがベースラインの10%でしか動作しなくなってしまったため、
処理が極端に遅くなってしまったということになります。
インスタンスサイズの違い
上記の例はt2.micro
の例でしたが、1時間あたりに受け取れるCPUクレジットの数などは、インスタンスサイズによって異なります。
インスタンスタイプ | 1時間あたりに受け取るCPUクレジット | 蓄積可能な最大獲得クレジット | ベースライン | 料金(東京リージョン) |
---|---|---|---|---|
t2.nano | 3 | 72 | 5% | 0.0076USD/時間 |
t2.micro | 6 | 144 | 10% | 0.0152USD/時間 |
t2.small | 12 | 288 | 20% | 0.0304USD/時間 |
1時間あたりに受け取るCPUクレジットが2倍になると、価格も2倍になるとことがわかります。
サイズが大きくなるとベースラインも上がっているので、その分はお得というイメージでしょうか。
その他詳しくはこちらをご覧ください。
バースト可能パフォーマンスインスタンスの CPU クレジットおよびベースラインパフォーマンス
おわりに
今回はt3.small
にすることで対応をしました。その後は遅いとの報告も上がらず順調です。
T2, T3, T3aの違いも書こうかと思ったのですが、CPUクレジットと話が逸れるのでまた機会があれば。
(無料利用枠を使いたい場合以外は、基本的にはT3 or T3aを使ったほうが良いかと思います)