2016-10-08 14 views
2

私はドッカーには新しいです。私はnodejs(sails.js)アプリケーションを持っています。ドッカーを使って展開しました。私のUbuntuマシンで稼働するドッカーコンテナは1つだけです。私は「ドッキングウィンドウの統計」を使用して、私のドッキングウィンドウコンテナによるメモリの使用状況を監視しようとしたドッカーコンテナが大量のメモリを消費しているのはなぜですか?

コマンドは、以下の(画像のように)私が手統計

docker stats

私の質問は、なぜこれです単一のドッカーの容器は〜207MiBのメモリをたくさん食べていますか?将来、ホストごとに実行するコンテナの数を増やしたい場合は、この倍数でメモリを消費しますか?私のマシン上で同じアプリケーションの100コンテナを実行したい場合、それは実現可能な解決策ではないようです。ドッカーコンテナによるメモリ消費を最適化する方法はありますか?

(Iはドッカーことなく、同じアプリケーションを実行すると(セイルは/ノードapp.jsを持ち上げ)それだけメモリの80メガバイトを消費する。)

答えて

0

デフォルトで、任意ドッカー容器は、CPU等のハードウェアの多くを消費することができますRAM。同じホスト上で複数のコンテナを実行している場合は、消費できるメモリ量を制限する必要があります。例として:-m「300M」--memoryスワップ「1G」

各ドッカー容器の平均オーバーヘッドは12Mであり、ドッカーデーモン - 130M

0

容器はロットを食べる理由は多くの側面に依存メモリの。

あなたのケースでは、nodejs(sails.js)がコンテナ内でより多くのメモリを消費していることを示しているとは思われません。おそらく、ほとんど同じメモリが必要です。

コンテナとは、基本コンテナ(FROMで定義された親コンテナ)を意味し、時にはメモリを消費する独自のリソースなどを持つ「サブコンテナ」もあります。

コンテナの起動時に、ドッキングコンテナのCPUまたはメモリを制限することができます。

docker run --memory=1Gb --cpushares=0 name-container

0

あなたがドッキングウィンドウを使用しないとき、どのようにメモリ使用量を計算するのですか?あなたのアプリケーションはファイルI/Oをしていますか?コンテナの数(ドッカーの作成スケール)を100にスケールする場合は、コンテナあたりのリソース制限をよりよく定義する必要があります。 私は制限したいサービスの下で私のドッキングウィンドウ-compose.ymlファイルの行を追加することでそれをやった:mはメガバイトの略

mem_limit: 32m 

ドッカー統計を見るだけで、再利用できる未使用メモリが含まれているので心配する必要はありません。妥当なメモリ制限を設定すると、コンテナがメモリを再要求して実行を継続することがわかります。リークが疑われる場合は、下のリンクに記載されているように、コンテナのcgroupの詳細なメモリ統計を確認してください。https://docs.docker.com/engine/admin/runmetrics/

https://stackoverflow.com/a/41687155/6919159で私の完全な回答をご覧ください。