web-dev-qa-db-ja.com

Docker + Apache、メモリ使用量はどのように機能しますか?

それぞれがApacheが提供するサイトを実行している50のコンテナーで設定されたdocker Hostがあるとします。

私が理解しているように、各コンテナではApacheインスタンスが実行されており、通常、各ApacheインスタンスはRAMあたり約250MBを使用します。 Apacheは子プロセスごとに数MBを必要とします。

各コンテナが完全なApacheインスタンスのメモリを必要とすると仮定しても正しいですか?例えば。 50サイトは50 x〜300mbを必要としますか?

あるいは、Apacheはコンテナー間でメモリーの一部を共有してメモリー効率を向上させることができますか?

Dockerは、各サイトがコンテナである効率的な「マス」ホスティング(たとえば、それぞれが少ないリソースを必要とする多数のサイト)に適していますか?それとも、50のサイトにサービスを提供するApacheコンテナを1つだけ持つのが現実的でしょうか?

6
thexacre

dockerは、Apacheインスタンス間の分離を提供します。これは、さまざまな理由(たとえば、各Webサイトが別のユーザーによって管理されている場合)で興味深い場合があり、別のサーバー上のインスタンスの再配置も容易にします。それが必要ない場合は、Apacheのインスタンスを1つだけ使用すると、パフォーマンスが向上するでしょう。

分離とは、仮想化のオーバーヘッド、メモリのパーティション化のオーバーヘッド、およびオペレーティングシステムのオーバーヘッドを支払う必要がないことを除いて、リソースの使用量は仮想マシンの使用とほぼ同じであることを意味します。そうは言っても、Apacheのメモリ使用量はサーバーの負荷に大きく依存するはずです。そのため、大きなサーバーを多数の小さなサーバーに分割しても、10倍に増えることは期待できません。また、カーネルが1つしかないため、ディスクキャッシュはコンテナ間で共有されるため、2つのインスタンス間でディスクアクセスパターンが類似している場合は、パフォーマンスが少し向上します。

6
pqnet

私があなたの質問を理解していて、懸念がコンテナインスタンス間で共有可能なメモリに関するものである場合、共有ライブラリに関するその質問への答えは、依存するということです。

引用:

https://groups.google.com/d/msg/docker-user/wCDC_sXzbks/i1gjlgQbxWEJ

2番目の利点は、コピーオンライトとページ共有が、コンテナに関係なく、ホスト上のすべてのプロセスに適用されることです。たとえば、同じファイルをメモリ(たとえば、ライブラリまたは実行可能ファイル)にマッピングする1000個のコンテナは、メモリスペースを1回だけ使用します。彼らがメモリに書き込む場合、それらが書き込むページのみがコピーされます。この2番目の利点の注意点は、コンテナが同じファイルをマッピングしていることをファイルシステムが認識する必要があることです。現在、これはaufsストレージドライバー(ファイルシステムレイヤーで動作)の場合ですが、lvm/devicemapperドライバー(ブロックレベルで動作するため、メリットがない)の場合は該当しません。開発中のzfsおよびbtrfsドライバーも、ページキャッシングの恩恵を受けます。したがって、何千ものコンテナおよびを実行するシナリオでは、それらが大きな同一ファイルをメモリにマップすることを期待しています。現在、aufsドライバはメモリ使用率を向上させます。しかし、これをベンチマークしていません。

5
David