37

Я работал на нескольких виртуальных машинах с 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 МБ, выделенных для VM. Существуют ли другие процессы, используемые VirtualBox, которые не названы так явно?

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

Обновить:

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

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

6 ответов6

12

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

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

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

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

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

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

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

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

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

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

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

12

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

4

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

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

2

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

1

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

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

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

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

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

1

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .