web-dev-qa-db-ja.com

VirtualBoxのメモリ使用量はどのように機能しますか?

VirtualBoxで複数のVMを実行していて、メモリ使用量はさまざまな観点から報告されていますが、VMが実際に使用するメモリの量を把握するのに問題があります。次に例を示します。

  • VM Windows 7(ゲストOSとして)をWindowsで実行していますXPホストマシン。
  • ホストマシンには3 GBのRAMが搭載されています
  • ゲストVMは、1 GBのベースメモリを持つように設定されています
  • ゲストOSでタスクマネージャーを実行すると、メモリ使用量が430 MBになる
  • ホストOSでタスクマネージャーを実行すると、VirtualBoxに属しているように見える3つのプロセスが表示されます。
    1. VirtualBox.exe(1)、60 MBのメモリを使用(これはCPU使用率が最も高いようです)
    2. VirtualBox.exe(2)、20 MBのメモリを使用
    3. VBoxSvc.exe、11.5 MBのメモリを使用
  • VMの実行中、ホストOSのメモリ使用量は約2 GBです
  • VMをシャットダウンすると、ホストOSのメモリ使用量が約900 MBに戻ります。

明らかに、ここにはいくつかの大きな違いがあります。ゲストOSが400 MB以上を使用できる方法を本当に理解していませんが、ホストOSはVMに割り当てられている75 MBしか表示しません。 VirtualBoxで使用されている、明らかに名前が付けられていない他のプロセスはありますか?

また、1 GBのマシンを実行しているかどうかを知りたいのですが、ホストOSから1 GB離れますか、それともゲストマシンが現在使用しているメモリの量だけですか?

更新:

誰かが私のメモリ使用量に対する不信を表明し、その不信が私に向けられたのか、またはホストOSのタスクマネージャーのレポート(おそらく原因である)なのかはわかりませんが、懐疑的な人のために、これらのプロセスのスクリーンショットを示しますホストマシン上:

VirtualBox task manager

38
DrFredEdison

VirtualBoxのプロセスアーキテクチャを理解するには、
VirtualBoxアーキテクチャ

GUIから仮想マシン(VM)を起動すると、2つのウィンドウ(メインウィンドウとVM)がありますが、3つのプロセスが実行されています。タスクマネージャー(Windowsの場合)またはシステムモニター(Linuxの場合)からシステムを見ると、次のように表示されます。

  1. VirtualBox、メインウィンドウのGUI。
  2. -startvmパラメーターで開始された別のVirtualBoxプロセス。これは、そのGUIプロセスがVMのシェルとして機能することを意味します。
  3. 上記のサービスであるVBoxSVCは、関連するすべてのプロセスを追跡するためにバックグラウンドで実行されます。これは最初のGUIプロセスによって自動的に開始されました。

メモリに関して、 ユーザーマニュアル は次のように述べています。

ベースメモリ

これは、実行時にRAMに割り当てられて与えられるVMの量を設定します。指定された量のメモリがホストオペレーティングシステムから要求されます。 VMを開始しようとするとき、ホストで空きメモリとして使用可能または使用可能にする必要があり、VMこれは、上記の「仮想マシンの作成」というセクションのガイドラインで説明したように、「新規仮想マシン」ウィザードで指定した設定と同じです。

これは、ゲストがホストから出ることを意味します。

  • それが宣言されたのと同じだけのメモリ
  • 各VMもVirtualBox実行可能ファイルであるため、メモリを追加する必要があります。

VirtualBoxのマニュアルのいくつかのバージョンが遅れている可能性があり、最新のメモリ最適化手法が文書化されていない可能性があります。

さらに、VirtualBoxは、定義されたVMメモリをすべて割り当てないことにより、メモリ使用量を最適化している可能性があります。

必要に応じてメモリを割り当てることは、物理メモリを大幅に節約できる最適化ですが、VMのメモリ集中型のプロセスは、VirtualBoxが頻繁にホストメモリを要求する必要があるため、速度が低下する場合があります。

12
harrymc

全額を反映していると思われるタスクマネージャの唯一の場所は、パフォーマンスタブにあります。合計コミットチャージの値は、VMに割り当てられた量とほぼ同じです。 1536MBが割り当てられた1つを閉じたところ、コミット料金は約2.4GBから0.8GBに下がりました。パフォーマンスモニターを使用して、これをある程度Virtual Boxに対して監視し、VirtualBox、VBoxSvc、VirtualBox#1、#2などのProcess:Private Bytesカウンター(実行中のVMごとに1つ)を選択できます。また、Memory:Committed Bytesカウンターもあり、すべてを対象としています。

12
MartW

これはWindowsの問題のようです。ここで3番目の投稿を表示: http://forum.sysinternals.com/pe-is-not-showing-all-memory-used-by-virtualbox_topic23886.html

VMMapのようなプログラムを使用しても、VBoxで使用するように指示したメモリが実際に使用されていることがわかります。タスクマネージャーやプロセスエクスプローラーに表示されない理由はわかりません。

5
RandomInsano

TaskManagerに表示されるこれらのエントリは、仮想マシン用ではなく、VirtualBox GUI用です。パフォーマンスタブには、使用されているメモリの合計量が明確に表示されますが、プロセスに関する詳細は表示されません。私は個人的にはVBoxが必要なものだけを使用することを望んでいますが、期待どおりに使用できることが重要であること、つまりリングフェンシングに同意することです。

2
Rob Vanstone

明らかに、ここにはいくつかの大きな違いがあります。ゲストOSが400 MB以上を使用できる方法を本当に理解していませんが、ホストOSはVMに割り当てられている75 MBしか表示しません。 VirtualBoxで使用されている、明らかに名前が付けられていない他のプロセスはありますか?

あなたはホスト上で何が行われているのか使用済みではなく、割り当てられたが何であるかを見ています。ゲストは400 MB以上のホストのRAM(まだ)を使用していません。

また、1 GBのマシンを実行しているかどうかを知りたいのですが、ホストOSから1 GB離れますか、それともゲストマシンが現在使用しているメモリの量だけですか?

1GBのRAMを予約しますが、実際にはそれよりもかなり少ない量で使用される可能性があります。ゲストがそのメモリの一部を使用しない場合、ゲスト用に予約されていても、Host RAMは他の多くの目的(クリーンなディスクページのキャッシュなど)に使用できます。ゲストはそのメモリの一部を使用しますが、十分に長くアクセスしない場合でも、日和見スワッピングによって物理メモリから排出される可能性があります。

残念ながら、あなたは非常に複雑な問題に踏み込んでおり、実際にそれを説明するには多くのページが必要になります。この質問に対する回答には、多くの誤った情報があります。

1
David Schwartz

VirtualBox Guest Additionsに関連している可能性があります。

私のUbuntuのインストールでは、WinXPによって報告されたように、現在〜20MBを使用しています。これはVBoxAdditionsを使用します。

私のLubuntuインストールでは、WinXPによって報告されたように、現在〜90MBを使用しています。インストールしただけです。 VBoxAdditionsがインストールされていません。

メモリ使用量はVMの動作によって異なります。私はziproxyを実行しているUbuntuインストールを持っています。ziproxyと通信する何かを実行すると、メモリ使用量がVMが使用されます。

ただし、一般に、仮想化は十分に進歩しているため、ゲストに明らかな仕様をホストから完全に割り当てる必要はありません。動的割り当てと強力なページングを使用しているようです。

1
helping-hand

SysInternalsの優れたアプリケーション VMMap を使用してそれを確認できます。

  1. まず、適切なプロセスを見つける必要があるため、たとえば Process Hacker または SysInternals 'Process Explorer を開始します。
  2. プロセスのリストをツリーとして表示する
  3. プロセスVBoxSVC.exeを見つけます。VMが実行されている場合は、いくつかの子プロセスVBoxHeadless.exeが必要です。
  4. 複数のVMが実行されている場合、VBoxHeadless.exeプロセスの複数のブランチが存在します。プロセスのコマンドラインをチェックして適切なブランチを選択します。これにはVMの識別子が含まれます
  5. ブランチの最下位のVBoxHeadless.exeに興味があります(つまり、子がなく、親だけなので、葉です)。そのPIDを覚えておいてください。
  6. VMMapを起動します
  7. PIDによって正しいVBoxHeadless.exeプロセスを選択し、[OK]をクリックします

私の場合、報告されたすべてのプライベートバイトワーキングセットおよびCommittedVMMapによるメモリは、VMに割り当てられているメモリの量とほぼ正確に一致します。