Как виртуальные машины могут потреблять так мало оперативной памяти на физическом хост-компьютере?


24

Я использую VirtualBox на компьютере под управлением Windows XP с 2 ГБ ОЗУ. Я создал виртуальную машину с Ubuntu и выделил ей базовую память в 750 МБ.

Просто чтобы проверить это, я запустил 20 вещей одновременно на виртуальной машине. Согласно «top» в Ubuntu, было использовано 750 мегабайт памяти, а также значительное пространство подкачки.

Однако в диспетчере задач Windows VitrualBox использовал только 45 000 КБ памяти. Когда я просил виртуальную машину делать все больше и больше, загрузка ЦП процесса VirtualBox возросла (в Windows), но использование памяти осталось прежним.

Как виртуальная машина, использующая 750 МБ памяти, может потреблять только 45 МБ памяти на физической машине?

Я предполагаю, что ответ заключается в том, что виртуальная машина использует не реальную память, а имитированную память (т. Е. Пространство подкачки), но она чувствует себя быстро, как будто она работает в ОЗУ.

ОБНОВЛЕНИЕ: я играл с 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человек). «Объект производительности» будет «Process», а «Private bytes» будет в списке счетчиков - очевидно, вам нужно будет выбрать соответствующий процесс из списка справа.


Здравствуй. Я попробовал это, но безуспешно нашел что-то под названием Private Bytes. Можешь дать пошаговый?
dggoldst

Добавили ...
Роуланд Шоу

Спасибо, это очень полезно. Я добавил анализ к вопросу. Все еще не могу понять, почему это не в сумме 750, хотя.
dggoldst

Очень странно. Я мог бы отметить, что PrivateBytes - это подмножество VirtualBytes (виртуальные байты - это доля выделенного адресного пространства, в то время как частные байты - это та память, которая еще не была освобождена - вы можете получить фрагментацию памяти с небольшой утечкой памяти и иметь приложения умирают с нехваткой памяти, даже если их достаточно). Может случиться так, что драйвер виртуализации выделяет память таким образом, что это означает, что она не будет отображаться, что имеет смысл, так как память должна быть защищена от подкачки на диск.
Роуланд Шоу

Из четырех счетчиков, которые вы указали в своей таблице, только «PoolNonPagedBytes» - это количество нестрабируемой виртуальной памяти, поэтому будет использоваться этот объем физической памяти. Остальные все виртуальные. Как и любой другой объем виртуальной памяти, фактическая оперативная память, которую она использует, почти всегда намного меньше. Это один из основных моментов виртуальной памяти.
Джейми Ханрахан,

5

В некоторых решениях по виртуализации в Linux способ, которым они распределяют память, заставляет ее отображаться ядру хоста в виде специального файла с отображением в памяти (очень похожего на /proc/kcoreспециальный файл), поэтому он учитывается в подсчете «кэшированных» в выходных данных free, а не в «использованный» счет.

Я предполагаю, что нечто подобное происходит в вашей среде Windows: 45 МБ будут использоваться процессами управления VirtualBox, а 750, выделенные для самой виртуальной машины, будут учитываться в другом месте.


0

Это может быть виртуальная память, отображенные в память файлы или что-то подобное.

Вы пытались отобразить другие столбцы в диспетчере задач?


0

Не верьте диспетчеру задач. Он не может видеть все.

Эта проблема более распространена в SQL Server, например, в Sql я никогда не нашел ни одного человека, который бы сказал мне способ получить точную информацию из диспетчера задач, который бы заставил меня поверить, что эта цифра не скрыта ни в одном из другие столбцы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.