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
タスクマネージャーの列は誤解を招く数値を示す可能性があります。プロセスごとの正確なメモリ使用量については、perfmon(コントロールパネルのパフォーマンスモニター)を使用して「プライベートバイト」の数値を確認できます。
これを表示するには、perfmonに移動し、クリックしてカウンターを追加します(私は Ctrl+I 一種の人)。 「パフォーマンスオブジェクト」は「プロセス」であり、「プライベートバイト」はカウンターリストにあります。明らかに、右側のリストから関連するプロセスを選択する必要があります。
Linuxでの一部の仮想化ソリューションでは、メモリを割り当てる方法により、ホストカーネルに特別なメモリマップファイル(/proc/kcore
特別ファイルのように)として表示されるため、の「キャッシュ」カウントにカウントされます。 「使用済み」カウントではなく、free
からの出力。
Windows環境でも同様のことが起こっていると思います。45MbはVirtualBoxの管理プロセスで使用され、VM自体に割り当てられた750は他の場所でカウントされます。
タスクマネージャーを信じないでください。すべてを見ることができません。
この問題はSQLServerでより一般的に見られます たとえば Sqlでは、タスクマネージャーから正確な情報を取得する方法を教えてくれた人を見つけたことがありません。 t他の列の1つに隠されています。
それは、仮想メモリ、メモリマップトファイル、または同様のものである可能性があります。
タスクマネージャで他の列を表示してみましたか?