いんふら女子めも

備忘録です

ECSタスクのCPUとメモリをチューニングする

ECSのtask定義のメモリとCPUをチューニングするときのメモ

メモリ制限

メモリは「ハード制限」と「ソフト制限」があり、2つの値を設定するとき必ず「ハード制限>ソフト制限」である必要がある。

  • 「ソフト制限」は、コンテナに予約するメモリ量(MiB)
  • 「ハード制限」は、メモリ使用量がこの値を超えると強制的にコンテナが終了するメモリ量(MiB)
    • ハード制限を設定することで一時的にメモリ使用量がバーストしても使うことができる

適正値がわからない場合、以下の範囲から始めると良いと言われている。

ECS ではウェブアプリケーション用に 300〜500 MB から始めることをお勧めします。

CPUユニット

  • ECSコンテナエージェントがコンテナ用に予約したCPUユニット数
  • コンテナインスタンス(EC2)にはCPUコアごとに1024ユニットある
  • 下記リンクにあるインスタンスタイプのvCPU数に1024かけることで使用可能なCPUユニット数を算出することができる

aws.amazon.com

チューニング方法

ECSのメモリとCPUのメトリクスは、サービスごとに監視しているので、Amazon開発ガイドに記載されている「サービス使用率」を使ってメモリとCPUをチューニングしていく。
それぞれ、現在のサービス使用率、タスクに割り当てているメモリ、CPU、サービスのタスク数が分かっているので、現在の使用率を算出することが可能である。

f:id:akngo22:20200303225306p:plain
サービスCPU使用率

f:id:akngo22:20200303225431p:plain
サービスメモリ使用率

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/cloudwatch-metrics.html#cluster_utilization

# CPU使用率が90%で割り当てCPUユニットが500、タスク数が2出会った場合
90=(100x/500*2)
x=900
つまり、1つのタスクあたり450CPUユニット使用していることがわかる

# メモリ使用率
メモリ使用率も算出の仕方はCPUと同様
ソフト制限を指定した場合、メモリ使用率を求めるためにその制限値が計算に使われ、ハード制限を指定した場合はハード制限に設定したメモリ量が使われる

使用率をどの程度に抑えたいかで割り当てるCPUユニットやメモリ量を変更することができる。