ECS で memoryReservation を設定したが OutOfMemoryError が発生するときの対処方法

2021.08.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

ECS Fargate で一つのタスク定義に複数のコンテナを設定しています。一部のコンテナがメモリを占有しないようにmemoryReservationを設定しましたが、予約したはずのメモリを他のコンテナが使用し、いざ予約したコンテナがメモリを使用するとOutOfMemoryErrorでコンテナが強制停止されました。
コンテナに割り当てたメモリを別のコンテナが使用しないようにするにはどうしたら良いでしょうか。

どう対応すればいいの?

コンテナ定義のmemoryパラメータによる割り当てご検討ください。

コンテナ定義 - Amazon Elastic Container Service

memory
タイプ: 整数
必須: いいえ
コンテナに適用されるメモリの量 (MiB 単位)。コンテナは、ここで指定したメモリを超えようとすると、強制終了されます。

ECS Fargate では、memoryReservationを指定しても、指定したコンテナ用にメモリが確保されるわけではなく、memoryReservationで指定した値のうち未使用メモリは、空きメモリとして他のコンテナが使用する場合があります。そのため、別のコンテナがメモリを使用しないようにするには、memoryを指定すると、別のコンテナがメモリを使用しないようにできます。

なお、memoryで指定したメモリを越えようとすると、コンテナは強制停止されます。停止を避けたい場合は、タスクサイズの変更やタスクの分割をご検討ください。

参考資料