ECS で memoryReservation を設定したが OutOfMemoryError が発生するときの対処方法
困っていた内容
ECS Fargate で一つのタスク定義に複数のコンテナを設定しています。一部のコンテナがメモリを占有しないようにmemoryReservation
を設定しましたが、予約したはずのメモリを他のコンテナが使用し、いざ予約したコンテナがメモリを使用するとOutOfMemoryError
でコンテナが強制停止されました。
コンテナに割り当てたメモリを別のコンテナが使用しないようにするにはどうしたら良いでしょうか。
どう対応すればいいの?
コンテナ定義のmemory
パラメータによる割り当てご検討ください。
コンテナ定義 - Amazon Elastic Container Service
memory
タイプ: 整数
必須: いいえ
コンテナに適用されるメモリの量 (MiB 単位)。コンテナは、ここで指定したメモリを超えようとすると、強制終了されます。
ECS Fargate では、memoryReservation
を指定しても、指定したコンテナ用にメモリが確保されるわけではなく、memoryReservation
で指定した値のうち未使用メモリは、空きメモリとして他のコンテナが使用する場合があります。そのため、別のコンテナがメモリを使用しないようにするには、memory
を指定すると、別のコンテナがメモリを使用しないようにできます。
なお、memory
で指定したメモリを越えようとすると、コンテナは強制停止されます。停止を避けたい場合は、タスクサイズの変更やタスクの分割をご検討ください。