AWS ECSのクラスターCPU利用率(CPUUtilization)が100%を超過しました。どういう条件で発生するのか、何%まで上昇するのかを調査したのでまとめます。
最初に結論 コンテナーに設定したCPUユニット数を超えてEC2が処理していた
下記2つの条件を満たすときに発生します
- ECSに使用しているEC2のCPUリソースに余裕がある
- サービスに割り当てられたCPUユニット数がEC2のコア数×1024より少ない
CPU利用率(CPUUtilization)は以下の計算式によって計算される。
CPUUtilization=
(サービスに属するタスクで使用されている CPU ユニット数)÷(サービスに属するタスクで予約されている CPU ユニット数)
インスタンスの処理能力に余裕がある場合は(サービスに属するタスクで予約されている CPU ユニット数)を超えて処理を行うので上記の計算式が100%を超えます。
式だけではわかりにくいので例
例えばサービスに属するタスクで予約されている CPU ユニット数が1024。
使用しているEC2がc5.large(2コア)の場合はサービスに属するタスクで使用されている CPU ユニット数は2048になります。
CPUに余裕があると仮定して計算式に当てはめると
サービスに属するタスクで使用されている CPU ユニット数=2048
÷
サービスに属するタスクで予約されている CPU ユニット数=1024
200%となります。
事象 ECSのCPU使用率が100%を超える
ECSのCPU使用率が100%を超えます。筆者が使用していた環境では200%程度になりました。
なお、その時の設定値は下記のとおりです。クラスター、サービス、タスク、コンテナがそれぞれ1つずつです。
・クラスター
・サービス
・タスク
・コンテナ:CPUユニット数1024
・ECSインスタンス:c5.large(2コア)
原因 コンテナーに設定したCPUユニット数を超えてEC2が処理していた
結論で述べたとおりですが、AWS公式ドキュメントを参照してもう少し見ていきます。
冒頭述べた通り、CPU利用率(CPUUtilization)は以下の計算式によって計算される。
CPUUtilization=
(サービスに属するタスクで使用されている CPU ユニット数)÷(サービスに属するタスクで予約されている CPU ユニット数)
こちらの計算式はAWS公式ドキュメントの記載から抜粋しました。
CPUUtilization
サービスの CPU 使用率 (
ClusterName
とServiceName
の両方でフィルタリングされたメトリクス) は、サービスに属するタスクで使用されている CPU ユニット数を、サービスに属するタスクで予約されている CPU ユニット数で割った値です。サービスの CPU 使用率メトリクスは、Fargate と EC2 の両方の起動タイプを使用するタスクに適用されます。有効なディメンション:
ClusterName
、ServiceName
。有効な統計: 平均、最小、最大、合計、サンプル数。最も有用な統計は Average です。
単位: パーセント。
Amazon ECS CloudWatch メトリクス
インスタンスの処理能力に余裕がある場合はサービスに属するタスクで予約されている CPU ユニット数を超えて処理を行うことを確認しました。AWS公式ドキュメントにもその旨の説明が記載されていました。
このタスクが一定期間中に CPU 負荷の高い作業を実行し、使用可能な 2,048 CPU ユニットすべてと 512 MiB のメモリを使用している場合、サービスからは CPU 使用率 400%、メモリ使用率 50% としてレポートされます。タスクがアイドル状態で 128 CPU ユニットおよび 128 MiB のメモリを使用している場合、サービスからは CPU 使用率 25%、メモリ使用率 12.5% としてレポートされます。
サービス使用率
コンテナ画面から設定するCPUユニット数はソフトリミットなので超えて処理をすることもあるということですね。
PR
当ブログはWordPressテーマSWELLを使用しています。非常に使いやすく、簡単にプロのようなデザインを使えるのでお勧めです!!
SWELL – シンプル美と機能性両立を両立させた、圧巻のWordPressテーマ
システムエンジニア
AWSを中心としたクラウド案件に携わっています。
IoTシステムのバックエンド開発、Datadogを用いた監視開発など経験があります。
IT資格マニアでいろいろ取得しています。
AWS認定:SAP, DOP, SAA, DVA, SOA, CLF
Azure認定:AZ-104, AZ-300
ITIL Foundation
Oracle Master Bronze (DBA)
Oracle Master Silver (SQL)
Oracle Java Silver SE
■略歴
理系の大学院を卒業
IT企業に就職
AWSのシステム導入のプロジェクトを担当