ECSタスク定義にハードメモリとソフトメモリの両方の制限を設ける目的について混乱しています。
IIRCソフト制限は、タスクを実行するためにインスタンス上でスケジューラが予約するメモリの量であり、ハード制限は、コンテナが殺される前に使用できるメモリの量です。
私の問題は、ECSスケジューラーがソフト制限に基づいてインスタンスにタスクを割り当てる場合、ソフト制限を超えてハード制限を下回るメモリを使用しているタスクが、インスタンスが最大メモリを超える可能性がある状況になる可能性があることです(仮定他のすべてのタスクは、ソフト制限以下のメモリをわずかに使用しています)。
これは正しいです?
ありがとう
CPUバウンドではなく主にメモリバウンドのコンピューティングワークロードを実行する場合は、ソフト制限ではなくハード制限のみを使用する必要があります。ドキュメントから:
コンテナー定義のmemoryまたはmemoryReservationの一方または両方にゼロ以外の整数を指定する必要があります。両方を指定する場合、メモリはmemoryReservationより大きくなければなりません。 memoryReservationを指定すると、その値は、コンテナーが配置されているコンテナーインスタンスの使用可能なメモリリソースから差し引かれます。それ以外の場合、メモリの値が使用されます。
http://docs.aws.Amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html
タスクにハードメモリ制限のみを指定すると、ECSはインスタンスへのタスクの配置を停止し、ドッカーはハード制限を超えようとするコンテナを強制終了するため、メモリ不足を回避できます。
ソフトメモリ制限機能は、メモリの最小最小値(ソフト制限)を予約するが、ハード制限までのバーストを時折許可するCPUバウンドアプリケーション用に設計されています。このタイプのCPU負荷の高いワークロードでは、インスタンスのメモリを使い果たす前にコンテナがCPUを使い果たすため、コンテナのメモリ使用量の特定の値はあまり気にしません。 CPU予約とソフトメモリ制限。このセットアップでは、ハードリミットは、何かが制御不能になった場合やメモリリークが発生した場合のフェイルセーフです。
要約すると、負荷テストを使用してワークロードを評価し、最初にCPUが不足する傾向があるか、メモリが不足する傾向があるかを確認する必要があります。 CPUにバインドされている場合、フェイルセーフとしてソフトメモリ制限とオプションのハード制限を使用できます。メモリが制限されている場合は、ソフト制限なしでハード制限のみを使用する必要があります。