Как работает использование памяти VirtualBox?

38

Я запускал несколько виртуальных машин с VirtualBox, и об использовании памяти сообщалось с разных точек зрения, и у меня возникли проблемы с определением объема памяти, который фактически используют мои виртуальные машины. Вот пример:

  • У меня есть виртуальная машина под управлением Windows 7 (в качестве гостевой ОС) на моем компьютере с Windows XP.
  • Хост-машина имеет 3 ГБ оперативной памяти
  • Гостевая виртуальная машина настроена на базовую память 1 ГБ
  • Если я запускаю Task Manger на гостевой ОС, я вижу использование памяти 430 МБ
  • Если я запускаю Task Manger на операционной системе хоста, я вижу 3 процесса, которые, похоже, принадлежат VirtualBox:
    1. VirtualBox.exe (1), использующий 60 МБ памяти (кажется, этот процессор больше всего загружается)
    2. VirtualBox.exe (2), используя 20 МБ памяти
    3. VBoxSvc.exe, используя 11,5 МБ памяти
  • Во время работы виртуальной машины использование памяти хост-ОС составляет около 2 ГБ.
  • Когда я выключаю виртуальную машину, операционная система хоста возвращается к использованию памяти и уменьшается примерно до 900 МБ

Ясно, что здесь есть огромные различия. Я действительно не понимаю, как GuestOS может использовать 400+ МБ, в то время как Host OS показывает только около 75 МБ, выделенных для виртуальной машины. Существуют ли другие процессы, используемые VirtualBox, которые не имеют такого названия?

Кроме того, я хотел бы знать, запускаю ли я компьютер с 1 ГБ, это займет 1 ГБ от моей операционной системы или только объем памяти, который используется гостевой машиной в настоящее время?

Обновить:

Кто-то выразил недоверие к количеству использования моей памяти, и я не уверен, было ли это недоверие направлено на меня или на отчет диспетчера задач моей хост-системы (что, возможно, является виновником), но для любого скептика вот скриншот этих процессов на хост-машине:

Диспетчер задач VirtualBox

DrFredEdison
источник
Сегодня я удивлялся тому же самому, когда запускал сразу две виртуальные машины VBox.
Март
В диспетчере задач включите некоторые другие столбцы памяти (View-> Select Columns ...). Память в Windows считается по-разному. Например, «размер коммита» может быть значительно выше, чем «Использование памяти». Что именно использовать и как их интерпретировать - это отдельная история.
lilbyrdie
Возможный дубликат: superuser.com/q/17266/302
Роуланд Шоу,

Ответы:

12

Единственное место в диспетчере задач, которое, по-видимому, отражает всю сумму, находится на вкладке производительности - значение Total Commit Charge примерно соответствует сумме, выделенной для VM. Я только что закрыл один с выделенным 1536 МБ, и плата за коммит снизилась с 2,4 ГБ до 0,8 ГБ. Вы можете в некоторой степени отслеживать это с помощью Virtual Box, используя Performance Monitor и выбирая Process: счетчики личных байтов для VirtualBox, VBoxSvc, а также VirtualBox # 1, # 2 и т. Д. (По одному для каждой работающей виртуальной машины). Также есть счетчик Memory: Committed Bytes для всего.

MartW
источник
ОП, кажется, не особенно заинтересован в том, что было выделено, но спрашивает о том, что используется. Поэтому я не уверен, как это связано с его вопросом.
Дэвид Шварц
12

Чтобы понять архитектуру процесса VirtualBox, см.
Архитектура VirtualBox :

Как только вы запускаете виртуальную машину (ВМ) из графического интерфейса, у вас есть два окна (главное окно и ВМ), но три запущенных процесса. Глядя на вашу систему из диспетчера задач (в Windows) или какого-либо системного монитора (в Linux), вы увидите следующее:

  1. VirtualBox, графический интерфейс для главного окна;
  2. Другой процесс VirtualBox, который был запущен с параметром -startvm, что означает, что его процесс GUI действует как оболочка для виртуальной машины;
  3. VBoxSVC, служба, упомянутая выше, которая работает в фоновом режиме, чтобы отслеживать все вовлеченные процессы. Это было автоматически запущено первым процессом GUI.

Что касается памяти, руководство пользователя гласит:

Базовая память

Это устанавливает объем оперативной памяти, которая выделяется и предоставляется виртуальной машине во время ее работы. Указанный объем памяти будет запрошен из операционной системы хоста, поэтому он должен быть доступен или предоставлен как свободная память на хосте при попытке запустить виртуальную машину и не будет доступен хосту во время работы виртуальной машины. Это тот же параметр, который был указан в мастере «Новая виртуальная машина», как описано в руководстве под разделом «Создание виртуальной машины» выше.

Это означает, что гость вынимает из хоста:

  • Столько памяти, сколько было заявлено
  • Каждая виртуальная машина также является исполняемым файлом VirtualBox, поэтому вам необходимо добавить ее память.

Всегда возможно, что руководство VirtualBox отстает на несколько версий, и что новейшие методы оптимизации памяти не документированы.

Кроме того, VirtualBox может оптимизировать использование памяти, не выделяя всю определенную память виртуальной машины.

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

harrymc
источник
8
Это не относится к VirtualBox - смотрите это: serverfault.com/questions/19935/…
MartW
@harrymc, так что вы говорите, что диспетчер задач НЕ показывает в списке процессов, сколько памяти использует виртуальный ящик?
Тревор Бойд Смит
@TrevorBoydSmith: все, что я хочу сказать, это то, что задействовано более одного процесса и правильно выбрать столбцы в диспетчере задач.
harrymc
2
мой вм занимает 1,2 гб. в диспетчере задач он показывает только 60 МБ. поэтому я бы сказал, что диспетчер задач не показывает всю память, которую использует мой виртуальный компьютер. если вы не можете как-то показать мне, как настроить диспетчер задач, чтобы показать 1,2 ГБ.
Тревор Бойд Смит
1
Весь этот разговор и все ответы - всего лишь вариации путаницы между виртуальной памятью и физической памятью.
Дэвид Шварц
5

Это выглядит как проблема Windows. Посмотреть третий пост здесь: http://forum.sysinternals.com/pe-is-not-showing-all-memory-used-by-virtualbox_topic23886.html

Использование такой программы, как VMMap, определенно показывает, что память, которую вы указываете использовать VBox, фактически используется. Не знаю, почему он не виден диспетчеру задач или процессору.

RandomInsano
источник
2

Те записи, которые вы видите в TaskManager, предназначены не для вашей виртуальной машины, а для графического интерфейса VirtualBox. Вкладка «Производительность» четко покажет вам, сколько вашей общей памяти используется, но без детализации процессов. Я лично хотел бы, чтобы VBox использовал только то, что ему нужно, но согласен, что для него важно иметь возможность использовать столько, сколько он ожидает, следовательно, ограждение от кольца.

Роб Ванстон
источник
1

Может быть связано с гостевыми дополнениями VirtualBox.

Моя установка Ubuntu в настоящее время использует ~ 20 МБ, как сообщает WinXP. Это с VBoxAdditions.

Моя установка Lubuntu в настоящее время использует ~ 90 МБ, как сообщает WinXP. Просто установил его; VBoxAdditions не были установлены.

Использование памяти зависит от того, что делает виртуальная машина. У меня установлена ​​Ubuntu под управлением ziproxy; когда я делаю что-то, что говорит с ziproxy, использование памяти резко возрастает на несколько мегабайт по мере использования виртуальной машины.

В целом, однако, виртуализация продвинулась достаточно далеко, чтобы спецификации, очевидные для гостя, не нужно было полностью выделять из хоста. Кажется, использовать динамическое распределение и сильный пейджинг.

рука помощи
источник
1

Ясно, что здесь есть огромные различия. Я действительно не понимаю, как GuestOS может использовать 400+ МБ, в то время как Host OS показывает только около 75 МБ, выделенных для виртуальной машины. Существуют ли другие процессы, используемые VirtualBox, которые не имеют такого названия?

Вы смотрите на то, что используется на хосте, а не на то, что выделяется . Гость не использует 400+ МБ оперативной памяти хоста (пока).

Кроме того, я хотел бы знать, запускаю ли я компьютер с 1 ГБ, это займет 1 ГБ от моей операционной системы или только объем памяти, который используется гостевой машиной в настоящее время?

Он зарезервирует 1 ГБ ОЗУ, однако в действительности может использовать значительно меньше. Если гость не использует часть этой памяти, оперативная память хоста может использоваться для многих других целей (например, для кэширования чистых страниц диска), даже если она зарезервирована для гостя. И даже если гость действительно использует часть этой памяти, если он не получает к ней доступ достаточно долго, он все равно может быть извлечен из физической памяти посредством оппортунистического обмена.

К сожалению, вы столкнулись с чрезвычайно сложной проблемой, и для ее объяснения потребовалось бы много страниц. В ответах на этот вопрос много неверной информации.

Дэвид Шварц
источник
0

Вы можете увидеть это, используя замечательное приложение SysInternals VMMap :

  1. Во-первых, вам нужно найти правильный процесс, поэтому запустите, например, Process Hacker или SysInternals Process Explorer.
  2. Вывести список процессов в виде дерева
  3. Найдите процесс VBoxSVC.exe, он должен иметь несколько дочерних процессов, VBoxHeadless.exeесли виртуальная машина работает
  4. Если работает несколько виртуальных машин, будет несколько ветвей VBoxHeadless.exeпроцессов, выберите правильную ветку, проверив командную строку процесса, она содержит идентификатор вашей виртуальной машины.
  5. Вас интересует самое низкое VBoxHeadless.exeв ветви (то есть у него больше нет дочерних элементов, только родитель, так что это лист), помните его PID
  6. Запустите VMMap
  7. Выберите правильный VBoxHeadless.exeпроцесс по его PID и нажмите OK

В моем случае, все сообщенные Частные байты , Рабочий набор и Committed память VMMap почти точно соответствовать объему памяти , назначенный VM в VirtualBox.

Давид Ференци Рогожан
источник