コンテナスワップ領域の管理
Amazon ECS を使用すると、Linux ベースの Amazon EC2 インスタンスで、スワップメモリ空間の使用状況をコンテナレベルで制御できるようになります。コンテナ単位のスワップ設定を使用すると、タスク定義内で各コンテナについて、スワップを有効または無効にできます。これが有効化されたコンテナでは、使用されるスワップ領域の最大量を制限できます。例えば、レイテンシーが厳しいコンテナでは、スワップを無効にすることができます。一方で、メモリ需要が一時的に高くなるコンテナでは、スワップを有効にすることで、コンテナのロード時にメモリ不足エラーが発生する可能性を減らすことができます。
コンテナのスワップ設定は、以下のコンテナ定義パラメータによって管理されます。
maxSwap
-
コンテナが使用できるスワップメモリの合計 (MiB 単位)。このパラメータは、docker run
の --memory-swap
オプションに変換されます。値はコンテナメモリの合計にmaxSwap
値を加えた値です。0
のmaxSwap
値を指定した場合、コンテナはスワップを使用しません。許容値は、0
または任意の正の整数です。maxSwap
パラメータを省略すると、コンテナは実行中のコンテナインスタンスのスワップ設定を使用します。swappiness
パラメータを使用するには、maxSwap
値を設定する必要があります。 swappiness
-
これにより、コンテナのメモリスワップ動作を調整できます。
swappiness
の値が0
であると、必要な場合を除きスワップは発生しません。swappiness
の値が100
の場合は、ページが積極的にスワップされます。使用できる値は、0
と100
の間の整数です。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
パラメータはサポートされていません。