2016-05-19 273 views

答えて

1

あなたはどちらかなしで、コンテナメモリを解放することはできません。

  1. はドッカーコンテナのは、ホストシステム上のプロセスとして表現されているので、これはホストのメモリ

をクリアコンテナ

  • を再起動します。したがって、コンテナプロセスに関連するメモリを解放する必要があります。

    を:私の知る限り理解し、これはあなたが本当にあなたがLinux上であると仮定すると、あなたがホストのメモリをクリアするために、次のコマンドを使用することができ、メモリが解放が必要な場合のプロセス等の共有メモリ構造に

    を頼ることがあり、特に以来困難ですディスクへのメモリバッファ内

    フラッシュデータ: $ sync

    クリアOSのページキャッシュ: $ echo 1 > /proc/sys/vm/drop_caches

  • +0

    はい、あなたは正しいです。いくつかのプロセスはメモリを共有するか、またはほとんどのメモリがプロセスの実行によって占有されるため、メモリ解放は危険で実行不能です。しかし、コンテナにメモリ使用率が低い場合は可能ですか? –

    +0

    小さな用語ノート、コンテナはプロセスではありません。コンテナはプロセスが実行されるコンテキストです。そのコンテキストで複数のプロセスを実行できます。コンテナコンテキスト内でプロセスを再起動することができます。したがって、2つは常に1対1のマッピングではありません。コンテナ内で実行されているプロセスは、ホスト上のプロセスと同じように、自身のメモリをフラッシュする機能を持つことができます。しかし、あなたはコンテナがプロセスを助けることができないと言っているのは間違いありません。 – Matt

    +0

    私の貧弱な表現のため申し訳ありませんが、私が意味することは、コンテナがプロセスではなく、コンテナ内で実行されるプロセスです。 –

    1

    は、それ自身の上のコンテナは、多くのメモリを使用しません。彼らは非常に軽量設計されています。それをあなたのホスト上のフェンスで囲まれた領域と考えてください。残りのホストからコンテナを分割するテープのほんの一部です。

    カーネルには、cgroups、名前空間、インターフェイス、デバイスなどが格納されていなければなりませんが、これはごくわずかです。

    Docker自体もコンテナの管理に少量のオーバーヘッドが導入されますが、それは通常無視されます(たとえば、1000個のポートをコンテナにマップしない限り)。

    メモリの主な用途は、コンテナ内で実行されるプロセスです。上限を設定した場合、コンテナは256MBを使用しません。これは、割り当てが失敗し始める前の上限です。

    使用済みメモリを解放する場合は、コンテナ内で実行しているプロセスにその能力が必要か、メモリを使用してプロセスを再起動できます。

    +0

    はい、メモリを積極的に解放したい場合は、あなたが言うことは唯一の正解です。実際には、コンテナの上限メモリ制限が設定されている場合、上限を超えないメモリを使用できます。また、100%でない場合、残りのメモリは同じホスト上にある他のコンテナでも使用できます。これは、Xenの仮想化技術におけるメモリ・バロンに似ています。 –

    関連する問題