バーチャルマシンは、物理ホストマシンでそれほど多くのRAMを消費できないのですか?


24

2GB RAMのWindows XPマシンでVirtualBoxを実行しています。仮想Ubuntuマシンを作成し、750MBのベースメモリを割り当てました。

テストのために、仮想マシンで20のことを一度に実行しました。Ubuntuの「トップ」によると、750メガのメモリとかなりのスワップスペースが使用されていました。

ただし、Windowsタスクマネージャーに戻ると、VitrualBoxは45,000Kのメモリしか使用していませんでした。仮想マシンにますます多くの処理を依頼すると、VirtualBoxプロセスのCPU使用率は(Windowsで)上がりましたが、メモリ使用量は同じままでした。

750 MBのメモリを使用している仮想マシンは、物理マシン上で45 MBのメモリしか消費できませんか?

答えは、仮想マシンは実際のメモリではなく、シミュレートされたメモリ(つまり、スワップスペース)を使用しているが、RAMで実行されているようにきびきびしていると思うからです。

更新:提案どおりにperfmonをいじりました。私が考えることができるすべてを要約しても、それはまだ300メガグラム未満しか占めていないようです...それで、それはまだ謎です。

Process               VirtualBox     VirtualBox#1     Total
PoolNonpagedBytes     5,840          42,552           48,392
PoolPagedBytes        119,796        166,892          286,688
PrivateBytes          8,884,224      52,719,616       61,603,840
VirtualBytes          75,939,840     161,202,176      237,142,016
Sum                   84,949,700     214,131,236      299,080,936

回答:


7

タスクマネージャーの列は誤解を招く数字を与える可能性があります。プロセスごとの正確なメモリ使用量については、perfmon(コントロールパネルのパフォーマンスモニター)を使用して「プライベートバイト」の数字を確認できます。

これを表示するには、perfmonに進み、クリックしてカウンターを追加します(私はCtrl+のI一種です)。「パフォーマンスオブジェクト」は「プロセス」であり、「プライベートバイト」はカウンタリストにあります。明らかに、右側のリストから関連するプロセスを選択する必要があります。


こんにちは。これを試しましたが、Private Bytesと呼ばれるものを見つけることができませんでした。ステップごとに教えてもらえますか?
dggoldst 2009

...追加されました
ローランド・ショー

おかげで、これは非常に役立ちます。質問に分析を追加しました。それでもなぜ合計が750にならないのかはわかりません。
dggoldst

非常に奇妙な。PrivateBytesはVirtualBytesのサブセットであることを指摘できます(仮想バイトは割り当てられたアドレス空間の割合であり、プライベートバイトはまだ解放されていないメモリです-小さなメモリリークでメモリの断片化が発生し、十分なメモリがある場合でも、アプリケーションはメモリ不足で停止します)。仮想化ドライバーが表示されないようにメモリを割り当てている可能性があります。これは、メモリがディスクへのページングから免れているはずなので意味があります。
ローランドショー

テーブルに配置する4つのカウンターのうち、「PoolNonPagedBytes」のみがページング不可の仮想メモリのカウントであるため、その量の物理メモリが使用されます。その他はすべて仮想です。他の仮想メモリサイズと同様に、実際に使用するRAMはほとんどの場合ずっと小さくなります。これは仮想メモリのポイントの1つです。
ジェイミーハンラハン

5

Linuxでの一部の仮想化ソリューションでは、メモリを割り当てる方法により、ホストカーネルに特別なメモリマップファイル(/proc/kcore特別なファイルと同様)として表示されるため、からの出力の「キャッシュ」カウントではfreeなく、 「使用済み」カウント。

Windows環境でも同様のことが起こっていると思います。45MbはVirtualBoxの管理プロセスで使用され、VMに割り当てられた750は他の場所でカウントされます。


0

仮想メモリ、メモリマップトファイル、または同様のものです。

タスクマネージャーで他の列を表示しようとしましたか?


0

タスクマネージャーを信じないでください。すべてを見ることができません。

この問題は、SQL Serverでのみよく見られます。たとえば 、SQLの場合、タスクマネージャーから正確な情報を取得する方法を教えてくれる人はいません。他の列。

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