コンテナスワップ領域の管理 - Amazon Elastic Container Service

コンテナスワップ領域の管理

Amazon ECS を使用すると、Linux ベースの Amazon EC2 インスタンスで、スワップメモリ空間の使用状況をコンテナレベルで制御できるようになります。コンテナ単位のスワップ設定を使用すると、タスク定義内で各コンテナについて、スワップを有効または無効にできます。これが有効化されたコンテナでは、使用されるスワップ領域の最大量を制限できます。例えば、レイテンシーが厳しいコンテナでは、スワップを無効にすることができます。一方で、メモリ需要が一時的に高くなるコンテナでは、スワップを有効にすることで、コンテナのロード時にメモリ不足エラーが発生する可能性を減らすことができます。

コンテナのスワップ設定は、以下のコンテナ定義パラメータによって管理されます。

maxSwap

コンテナが使用できるスワップメモリの合計 (MiB 単位)。このパラメータは、docker run--memory-swap オプションに変換されます。値はコンテナメモリの合計に maxSwap 値を加えた値です。

0maxSwap 値を指定した場合、コンテナはスワップを使用しません。許容値は、0 または任意の正の整数です。maxSwap パラメータを省略すると、コンテナは実行中のコンテナインスタンスのスワップ設定を使用します。swappiness パラメータを使用するには、maxSwap 値を設定する必要があります。

swappiness

これにより、コンテナのメモリスワップ動作を調整できます。swappiness の値が 0 であると、必要な場合を除きスワップは発生しません。swappiness の値が 100 の場合は、ページが積極的にスワップされます。使用できる値は、0100 の間の整数です。swappiness パラメータを指定しない場合、デフォルト値の 60 が使用されます。maxSwap の値が指定されていない場合、このパラメータは無視されます。このパラメータは、docker run--memory-swappiness オプションにマッピングされます。

次の例に、JSON での構文を示します。

"containerDefinitions": [{ ... "linuxParameters": { "maxSwap": integer, "swappiness": integer }, ... }]

コンテナのスワップに関する考慮事項

コンテナごとのスワップ構成を使用する場合は、次の点を考慮してください。

  • スワップ領域は有効化され、使用するコンテナ向けのタスクをホストする、Amazon EC2 インスタンスに割り当てられる必要があります。Amazon ECS 最適化 AMI のデフォルトでは、スワップは有効になっていません。この機能を使用するには、インスタンスでスワップを有効にする必要があります。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「インスタンスストアのスワップボリューム」または「スワップファイルを使用して Amazon EC2 インスタンスのスワップ領域として動作するようにメモリを割り当てるには?」を参照してください。

  • スワップスペースのコンテナ定義パラメータは、EC2 起動タイプを指定したタスク定義でのみサポートされます。これらのパラメータは、Fargate の Amazon ECS での使用のみを目的としたタスク定義ではサポートされていません。

  • この機能は Linux コンテナでのみサポートされています。現在、Windows コンテナはサポートされていません。

  • コンテナ定義の maxSwap および swappiness パラメータがタスク定義から省略されている場合、各コンテナの swappiness には、デフォルト値の 60 が設定されます。加えて、スワップの合計使用量は、コンテナが予約したメモリ量の 2 倍に制限されます。

  • Amazon Linux 2023 でタスクを使用している場合、swappiness パラメータはサポートされていません。