Як працює використання пам'яті VirtualBox?


38

Я запускав кілька віртуальних машин з VirtualBox, і про використання пам’яті повідомлялося з різних точок зору, і у мене виникають проблеми з підрахунком, скільки пам’яті фактично використовують мої VM. Ось приклад:

  • У мене на хост-сервері Windows XP встановлений VM під керуванням Windows 7 (як гостьова ОС).
  • Хост-машина має 3 ГБ оперативної пам’яті
  • У гостьовій машині встановлено пам'ять 1 Гб
  • Якщо я запускаю Менеджер завдань на гостьовій ОС, я бачу використання пам'яті 430 Мб
  • Якщо я запускаю Менеджер завдань на хост-операційній системі, я бачу 3 процеси, які, здається, належать до VirtualBox:
    1. VirtualBox.exe (1), використовуючи 60 Мб пам'яті (у цього, здається, найбільше використання процесора)
    2. VirtualBox.exe (2), використовуючи 20 Мб пам'яті
    3. VBoxSvc.exe, використовуючи 11,5 Мб пам'яті
  • Під час роботи VM використання оперативної пам'яті Host OS становить близько 2 Гб
  • Коли я вимикаю відеомагнітофон, Host OS повертається до використання пам'яті, знижується приблизно до 900 МБ

Так ясно, тут є величезні відмінності. Я дійсно не розумію, як GuestOS може використовувати 400+ Мб, в той час як Host OS показує лише близько 75 Мб, виділених на VM. Чи існують інші процеси, що використовуються VirtualBox, які не так очевидно названі?

Крім того, я хотів би дізнатися, чи запускаю я машину на 1 ГБ, чи не відійде 1 Гб від моєї хост-операції, або лише обсяг пам’яті, який гостьова машина зараз використовує?

Оновлення:

Хтось висловив недовіру до моїх номерів використання пам’яті, і я не впевнений, чи це недовіра була спрямована на мене, чи звіт мого менеджера завдань ОС (що, можливо, є винуватцем), але для будь-яких скептиків ось скріншот цих процесів на хост-машині:

Менеджер завдань VirtualBox


Мені було цікаво саме те, що було раніше, коли запускали два VMx VM відразу.
MartW

У диспетчері завдань увімкніть деякі інші стовпці пам'яті (Перегляд-> Вибрати стовпці ...). Пам'ять обчислюється багатьма різними способами. Наприклад, "розмір фіксації" може бути істотно вище, ніж "Використання пам'яті". Що саме використовувати та як їх інтерпретувати - це вже інша історія.
lilbyrdie

Можливий дублікат: superuser.com/q/17266/302
Rowland Shaw

Відповіді:


12

Єдине місце в диспетчері завдань, яке, здається, відображає повну суму, знаходиться на вкладці "Ефективність" - значення "Загальна сума комісійної комісії" приблизно відповідає розміру, призначеному для VM. Щойно я закрив один із виділеними 1536 МБ, і вартість комісії знизилася з приблизно 2,4 ГБ до 0,8 ГБ. Ви можете певною мірою відстежувати це за допомогою Virtual Box за допомогою Монітора продуктивності та вибираючи Процес: Лічильники приватних байтів для VirtualBox, VBoxSvc, а також VirtualBox # 1, # 2 тощо тощо (по одному для кожного запущеного VM). Також є лічильник пам'яті: лічильник байтів на все.


ОП, здається, не особливо цікавиться тим, що виділено, але запитує про те, що використовується. Тож я не впевнений, як це стосується його питання.
Девід Шварц

12

Щоб зрозуміти архітектуру процесів VirtualBox, див
. Архітектуру VirtualBox :

Після запуску віртуальної машини (VM) з графічного інтерфейсу у вас є два вікна (головне вікно та VM), але три процеси. Дивлячись на вашу систему з диспетчера завдань (в Windows) або якогось системного монітора (в Linux), ви побачите:

  1. VirtualBox, графічний інтерфейс для головного вікна;
  2. Ще один процес VirtualBox, який був запущений з параметром -startvm, що означає, що його GUI-процес виконує функції оболонки для VM;
  3. VBoxSVC, згадана вище послуга, яка працює у фоновому режимі, щоб відстежувати всі процеси, що беруть участь. Це було автоматично запущено першим процесом GUI.

Що стосується пам'яті, в Посібнику користувача зазначено:

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

Це встановлює обсяг оперативної пам’яті, який виділяється та надається VM під час його роботи. Зазначений об'єм пам'яті буде запитуватися від операційної системи хоста, тому він повинен бути доступним або доступним як вільна пам'ять на хості при спробі запуску VM і не буде доступний для хоста під час роботи VM. Це те саме налаштування, яке було визначено майстром "Нова віртуальна машина", як описано в керівництві в розділі "Створення віртуальної машини" вище.

Це означає, що гість виймає господаря:

  • Стільки пам’яті, скільки було задекларовано
  • Кожен VM є також виконуваним файлом VirtualBox, тому вам потрібно додати його пам'ять.

Завжди можливо, що в посібнику VirtualBox є кілька версій позаду, і що остання техніка оптимізації пам'яті не задокументована.

Крім того, VirtualBox може оптимізувати використання пам'яті, не виділяючи всю визначену пам'ять VM.

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


8
Це не конкретно для VirtualBox - дивіться це: serverfault.com/questions/19935/…
MartW

@harrymc, то, що ви говорите, це те, що менеджер завдань НЕ показує у списку процесів, скільки віртуального вікна пам'яті використовується?
Тревор Бойд Сміт

@TrevorBoydSmith: Все, що я говорю, - це те, що в роботі більше ніж один процес, і правильно вибрати стовпці в диспетчері завдань.
harrymc

2
мій vm займає 1,2 ГБ. у менеджері завдань він показує лише 60 Мб. тож я би стверджував, що менеджер завдань не показує всю пам'ять, яку використовує мій vm. якщо ви не зможете якось показати мені, як налаштувати менеджер завдань, щоб показати 1,2 Гбіт.
Тревор Бойд Сміт

1
Вся ця розмова та всі відповіді є лише варіаціями щодо плутанини між віртуальною пам'яттю та фізичною пам'яттю.
Девід Шварц

5

Схоже, це проблема Windows. Перегляньте третє повідомлення тут: http://forum.sysinternals.com/pe-is-not-showing-all-memory-used-by-virtualbox_topic23886.html

Використання такої програми, як VMMap, безумовно, показує, що пам'ять, яку ви скажете VBox використовувати, насправді використовується. Поняття не має, чому це не видно менеджеру завдань чи провіднику процесів.


2

Ці записи, які ви бачите в TaskManager, не призначені для вашої віртуальної машини, вони призначені для GUI VirtualBox. На вкладці продуктивності чітко ви побачите, яка частина вашої загальної пам'яті використовується, але без деталізації щодо процесів. Я особисто хотів би, щоб VBox використовував лише те, що йому потрібно, але погоджуйтесь, що це важливо, щоб він міг використовувати стільки, скільки очікує, отже, і огородження кільця.


1

Може бути пов’язано з доповненнями до гостей VirtualBox.

Моя установка Ubuntu наразі використовує ~ 20 Мб, як повідомляє WinXP. Це з VBoxAdditions.

Моя установка Lubuntu наразі використовує ~ 90MB, як повідомляє WinXP. Просто встановив його; VBoxAdditions не встановлено.

Використання пам'яті залежить від того, чим займається VM. У мене Ubuntu встановлює запущений ziproxy; коли я роблю щось, що спілкується з ziproxy, використання пам'яті викликає кілька мегабайт, коли VM вступає у використання.

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


1

Так ясно, тут є величезні відмінності. Я дійсно не розумію, як GuestOS може використовувати 400+ Мб, в той час як Host OS показує лише близько 75 Мб, виділених на VM. Чи існують інші процеси, що використовуються VirtualBox, які не так очевидно названі?

Ви дивитесь на те, що використовується для хоста, а не те, що виділяється . Гість не використовує 400+ МБ оперативної пам'яті хоста (поки що).

Крім того, я хотів би дізнатися, чи запускаю я машину на 1 ГБ, чи не відійде 1 Гб від моєї хост-операції, або лише обсяг пам’яті, який гостьова машина зараз використовує?

Він зарезервує 1 Гб оперативної пам’яті, проте він може фактично закінчитися, використовуючи значно менше, ніж це. Якщо гість не використовує частину цієї пам’яті, оперативна пам’ять хоста може використовуватися для багатьох інших цілей (наприклад, кешування сторінок чистих дисків), навіть якщо вона зарезервована для гостя. І навіть якщо гість використовує частину цієї пам’яті, якщо він не отримує доступ до неї досить довго, він все одно може витягнутися з фізичної пам’яті шляхом умовно-патогенних змін.

На жаль, ви перебралися до надзвичайно складного питання, і це потребуватиме багато сторінок, щоб справді пояснити це. У відповідях на це питання є багато невірної інформації.


0

Ви можете побачити це за допомогою чудового додатку VMMap від SysInternals :

  1. По-перше, вам потрібно знайти правильний процес, тому запустіть, наприклад, Process Hacker або Провідник процесів SysInternals
  2. Відобразить список процесів у вигляді дерева
  3. Знайдіть процес VBoxSVC.exe, він повинен мати кілька дочірніх процесів, VBoxHeadless.exeякщо VM працює
  4. Якщо працює кілька віртуальних машин, буде кілька гілок VBoxHeadless.exeпроцесів, виберіть потрібну гілку, перевіривши командний рядок процесу, він містить ідентифікатор вашого віртуального комп'ютера
  5. Вас цікавить найнижча VBoxHeadless.exeгалузь (тобто у неї більше немає дітей, просто батько, тож це листочок), пам’ятайте його PID
  6. Запустіть VMMap
  7. Виберіть потрібний VBoxHeadless.exeпроцес за допомогою його PID та натисніть кнопку ОК

У моєму випадку, все повідомлені Приватні байти , Робочий набір і Committed пам'ять VMMap майже точно відповідати обсягу пам'яті , призначений VM в VirtualBox.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.