スワップ機能は、非アクティブなメモリページを一時的に格納します。 システムメモリが十分である場合、システムは、非アクティブなメモリページをスワップ空間に格納することができ、他の実行中のプロセスのためにメモリを解放する。 このトピックでは、Alibaba Cloud Linuxでスワップ機能を設定するリスクと、スワップ機能を設定する方法について説明します。 ビジネス要件に基づいて、スワップ機能を有効にするかどうかを決定できます。
Swappinessパラメータ
Alibaba Cloud Linux Elastic Compute Service (ECS) インスタンスでは、デフォルトのswappiness値は0です。
Swappinessは、スワップ空間を使用する傾向を管理するカーネルパラメータです。
0: システムは、スワップパーティションの代わりに可能な限り物理メモリを使用します。
100: システムは、物理メモリの代わりに可能な限りスワップパーティションを使用します。
スワッピネス値が100に近いかまたは等しいなどの過大な値に設定される場合、十分なメモリが利用可能であっても、スワップ空間は依然として使用され得る。 これにより、システム性能が低下し、メモリアクセス待ち時間が増大する。
スワップ機能を構成するリスク
ホストでスワップ機能を設定するリスク:
システムメモリの圧力が高すぎる場合、システムは頻繁にメモリを交換する可能性があります。 ディスクからのデータの読み取りは、メモリからのデータの読み取りよりも遅いため、スワップメモリを頻繁に使用すると、待ち時間が長くなります。 これは、アプリケーションのパフォーマンスとシステムの安定性に影響します。
コンテナでスワップ機能を設定するリスク:
リソース割り当ての複雑さ: コンテナ化された環境では、リソース管理は通常、ホストレベルで実行されます。 コンテナがスワップメモリを割り当てて使用するように構成されると、リソース管理が複雑になり、他のコンテナの安定性が影響を受ける可能性があります。
リソース競合: 複数のコンテナがホスト上のスワップメモリを使用する場合、リソース競合が発生する可能性があります。 これは、容器の性能および安定性に悪影響を及ぼす。 特に、複数のコンテナが同時にスワップ状態に入ると、ディスクは大きなI/O圧力を受ける。
高いレイテンシと低いパフォーマンス: コンテナでスワップメモリを使用すると、特にI/O集約型アプリケーションの場合、レイテンシが増加し、パフォーマンスが低下します。
スワップ機能の設定
ほとんどの場合、コンテナーはホストのカーネルに依存してリソースを管理するため、コンテナーのスワップ機能を構成しないことをお勧めします。 ホストまたはコンテナーの起動パラメーターを使用して、コンテナーのスワップ機能を管理および設定できます。 コンテナーのスワップ機能を構成する場合と比較して、ホストのカーネルを使用して、より効率的かつ均一な方法でスワップメモリを管理できます。 コンテナ内でスワップ機能を構成すると、不必要な複雑さが生じ、管理が困難になります。 例えば、コンテナ内のスワップ構成は、集中的に監視および修正することが困難である。
ホストでのスワップ機能の設定
詳細については、「」をご参照ください。Linuxインスタンスにスワップパーティションを設定し、よくある質問を解決するにはどうすればよいですか?
コンテナー起動パラメーターを使用してコンテナーのスワップ機能を設定する
コンテナーの起動時に、memoryおよびmemory-swapパラメーターを使用して、メモリ使用量を管理し、メモリ使用量をスワップできます。
-- memory=<value>: コンテナが使用できる物理メモリの量を指定します。-- memory-swap=<value>: コンテナが使用できるメモリの合計量 (物理メモリとスワップメモリの量を含む) を指定します。 メモリの合計量が使用可能な物理メモリの量よりも多い場合、過剰なメモリはパーティションのスワップに割り当てられます。
この例では、Cコードが使用されます。 メモリの合計量を2 GB、コンテナの物理メモリの量を1 GB、スワップメモリの量を1 GBに設定します。
docker run --memory=1g --memory-swap=2g my_container