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


38

VirtualBoxを使用して複数のVMを実行しており、さまざまな観点からメモリ使用量が報告されていますが、VMが実際に使用しているメモリ量を把握するのに苦労しています。以下に例を示します。

  • Windows XPホストマシンでWindows 7を(ゲストOSとして)実行しているVMがあります。
  • ホストマシンには3 GBのRAMがあります
  • ゲストVMは、1 GBのベースメモリを持つようにセットアップされています
  • ゲストOSでタスクマネージャーを実行すると、430 MBのメモリ使用量が表示されます
  • ホストOSでTask Mangerを実行すると、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タスクマネージャー


今日、2つのVBox VMを一度に実行するとき、まったく同じことを考えていました。
MartW

タスクマネージャで、他のメモリ列の一部をオンにします([表示]-> [列の選択...])。Windowsでは、メモリはさまざまな方法でカウントされます。たとえば、「コミットサイズ」は「メモリ使用量」よりも大幅に大きくなる可能性があります。正確にどれを使用し、どのように解釈するかは別の話です。
リルビー

回答:


12

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


OPは何が割り当てられているかに特に関心があるようには見えませんが、何が使用されているかを尋ねています。だから、これが彼の質問にどのように関係するのか分かりません。
デビッドシュワルツ

12

VirtualBoxのプロセスアーキテクチャを理解するには、
VirtualBoxアーキテクチャを参照してください。

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

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

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

ベースメモリ

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

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

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

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

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

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


8
これは、VirtualBoxの固有ではありません-この参照:serverfault.com/questions/19935/...
MartW

@harrymc、あなたが言っているのは、タスクマネージャーがプロセスリストに仮想ボックスが使用しているメモリ量を表示しないということですか?
トレバーボイドスミス

@TrevorBoydSmith:私が言っているのは、複数のプロセスが関係していて、タスクマネージャーの列を正しく選択することだけです。
ハリーマック

2
VMは1.2 GBを占有します。タスクマネージャーでは、60MBしか表示されません。そのため、タスクマネージャーには、vmが使用しているすべてのメモリが表示されないと主張します。どうにかしてタスクマネージャーを調整して1.2 GBを表示する方法を教えてくれない限り。
トレバーボイドスミス

1
この会話全体とすべての答えは、仮想メモリと物理メモリの混乱に関する単なるバリエーションです。
デビッドシュワルツ

5

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

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


2

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


1

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

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

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

メモリ使用量は、VMの実行内容によって異なります。ziproxyを実行しているUbuntuをインストールしています。私がziproxyとやり取りすることをすると、VMが使用されるにつれてメモリ使用量が数メガバイト増加します。

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


1

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

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

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

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

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


0

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

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

私の場合、VMMapによって報告されたすべてのPrivate bytesワーキングセット、およびコミットされたメモリは、VirtualBoxでVMに割り当てられたメモリの量とほぼ正確に一致します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.