Lightsail(t2)がCPUクレジットを使い果たしてMySQLのCPU使用率が200%を超えてた件

LightsailにデプロイしているWebサービスのレスポンスが妙に遅くてサーバのメトリクスを確認したらMySQLのCPU使用率が200%超えてました。
100%って超えられるもんなんですね。自分で限界を決めちゃ駄目だなと思いました。

MySQLのコンテナのCPU使用率。総武線の乗車率より高い。

この記事は上記の問題の原因を調べた記事になります。

原因はCPUクレジットの枯渇

結論から言いますとCPUクレジットが枯渇してました。
CPUクレジットとはAWSの用語で、CPUのフルパワーを使うために必要なポイントみたいなもんです。
仕組みとしてはソーシャルゲームのスタミナに近いかもしれません。
そのCPUクレジットを使い切ってしまって使えるCPUパワーが20%に制限されていました。

CPUクレジットとベースライン使用率

AWSのt系のインスタンスはランニングコストが安い代わりにCPUクレジットベースライン使用率という仕組みがあります。
(今回使用していたLightsailは内部的にはt2インスタンスらしいです。)
以下の画像はLightsailのCPU使用率のグラフです。
20%の高さにラインがあり、それ以上はオレンジ色で「バースト可能ゾーン」となっています。
これはCPU使用率が20%を超えるとCPUクレジットを消費する事を表しています。
この20%のラインの事をベースライン使用率と呼びます。

続いて、CPUクレジットの残高のグラフです。
変動が少なくて分かりにくいですが、CPU使用率が20%を超えている時間が多いためCPUクレジットが消費されていってます。(右肩下がりに減ってます)
このCPUクレジットが枯渇すると、CPU使用率が20%を超えられなくなります
なお、CPUクレジットは時間で回復します。(まんまソシャゲのスタミナですね)

以下は、t2インスタンスのCPUクレジットとベースライン使用率の一覧です。
インスタンスサイズに応じて1時間あたりに貰えるCPUクレジットとベースライン使用率が異なる事が分かります。

まとめ

Lightsailやt系インスタンスを使うときはCPUクレジットとベースライン使用率に留意しましょう!

余談

CPUクレジットが枯渇した時のvmstatの表示は、cpuのst(Stolen Time)が71や69と言った高い数値を示していました。
これは「ゲストOSがリソース要求を行ったにもかかわらずCPUリソースを割り当ててもらえなかった時間の割合」だそうです。

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st                 UTC
 8  3      0  71512      0 158832    0    0  1444  1098   19   67 12  4 48 28  9 2020-09-27 11:26:45
10  1      0  77492      0 152984    0    0 14488   194  380 1992 26  3  0  0 71 2020-09-27 11:26:47
12  0      0  76536      0 153888    0    0 12074   230  427 2190 25  6  0  0 69 2020-09-27 11:26:49

以上です!

コメントする