ECS で memoryReservation を設定したが、他のコンテナがメモリを使用し OutOfMemoryError が発生する場合の対処方法

2021.08.17

困っていた内容

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

どう対応すればいいの?

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

コンテナ定義 - Amazon Elastic Container Service

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

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

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

参考資料