Amazon ECS Linux コンテナインスタンスのメモリを予約する - Amazon Elastic Container Service

Amazon ECS Linux コンテナインスタンスのメモリを予約する

Amazon ECS コンテナエージェントがクラスターにコンテナインスタンスを登録する場合、エージェントは、コンテナインスタンスがタスク用に予約できるメモリ容量を決定する必要があります。プラットフォームのメモリオーバーヘッドとシステムカーネルが占めるメモリのため、この数値は、Amazon EC2 インスタンスとして公開されているインストール済みメモリ量とは異なります。例えば、m4.large インスタンスには 8 GiB のメモリがインストールされています。しかし、これはコンテナインスタンスが登録されたときに、タスクに使用できるメモリが正確に 8192 MiB に変換されるとは限りません。

Amazon ECS コンテナエージェントには、タスクに割り当てられたプールから指定したメモリ容量 (MiB) を削除するのに使用できる、ECS_RESERVED_MEMORY という設定変数があります。これにより、重要なシステムプロセスのメモリを効果的に確保することができます。

タスクでコンテナインスタンスのすべてのメモリを占有している場合、メモリが不可欠なシステムプロセスとタスクが競合し、システム障害が発生する可能性があります。

例えば、コンテナエージェント設定ファイルで ECS_RESERVED_MEMORY=256 を指定すると、そのインスタンスの総メモリマイナス 256 MiB が登録され、256 MiBのメモリは ECS タスクに割り当てされなくなります。エージェント構成変数とその設定方法の詳細については、Amazon ECS コンテナエージェントの設定 および Amazon ECS Linux コンテナインスタンスをブートストラップしてデータを渡す を参照してください 。

タスクに 8192 MiB を指定して、使用可能なメモリが 8192 MiB 以上のコンテナインスタンスがなくこの要件を満たせない場合、そのタスクはクラスターに配置できません。マネージド型コンピューティング環境を使用している場合、リクエストに対応するために AWS Batch はより大きなインスタンスタイプを起動する必要があります。

また、コンテナインスタンスの Amazon ECS コンテナエージェントやその他の重要なシステムプロセス用のメモリを確保しなくてはならず、そうでないとタスクのコンテナが同じメモリに対して競合し、システム障害を引き起こす可能性があります。

Amazon ECS コンテナエージェントは、Docker ReadMemInfo()関数を使用してオペレーティングシステムで使用可能な合計メモリのクエリを実行します。Linux と Windows の両方に、合計メモリを判断できるコマンドラインユーティリティが備わっています。

例 -Linux 合計メモリを決定

free コマンドは、オペレーティングシステムによって認識される合計メモリを返します。

$ free -b

Amazon ECS に最適化された Amazon Linux AMI を実行する m4.large インスタンスの出力例。

total used free shared buffers cached Mem: 8373026816 348180480 8024846336 90112 25534464 205418496 -/+ buffers/cache: 117227520 8255799296

このインスタンスには 8373026816 バイトの合計メモリーがあり、タスクに使用できる 7985 MiB に変換されます。

例 -Windows 合計メモリを決定

wmic コマンドは、オペレーティングシステムによって認識される合計メモリを返します。

C:\> wmic ComputerSystem get TotalPhysicalMemory

Amazon ECS に最適化された Windows Server AMI を実行する m4.large インスタンスの出力例。

TotalPhysicalMemory 8589524992

このインスタンスには合計メモリーが 8589524992 バイトあり、タスクに使用可能な 8191 MiB に変換されます。

コンテナインスタンスのメモリを表示する

Amazon ECS コンソール (または DescribeContainerInstances API 操作) で、コンテナインスタンスに登録されているメモリ容量を表示できます。特定のインスタンスタイプに対して、可能な限り多くのメモリをタスクに割り当て、リソース使用率を最大化しようとしている場合は、そのコンテナインスタンスに使用可能なメモリを確認してから、そのタスクに十分なメモリを割り当てることができます。

コンテナインスタンスメモリを表示するには
  1. コンソール (https://console.aws.amazon.com/ecs/v2) を開きます。

  2. ナビゲーションペインで [クラスター] を選択し、コンテナインスタンスをホストするクラスターを選択します。

  3. [インフラストラクチャ] を選択し、[コンテナインスタンス] でコンテナインスタンスを選択します。

  4. [リソース] セクションに、コンテナインスタンス用に登録された使用可能なメモリが表示されます。

    [登録済み] メモリの値は、Amazon ECS の初回起動時に登録されたときのコンテナインスタンスのメモリの値で、[利用可能] メモリの値は、まだ タスクに割り当てられていないメモリの値です。