Korzystam z kilku maszyn wirtualnych z VirtualBox, a użycie pamięci jest zgłaszane z różnych perspektyw i mam problem z określeniem, ile pamięci faktycznie używają moje maszyny wirtualne. Oto przykład:
- Mam maszynę wirtualną z systemem Windows 7 (jako system operacyjny gościa) na moim komputerze z systemem Windows XP.
- Maszyna hosta ma 3 GB pamięci RAM
- Gość VM jest skonfigurowany tak, aby mieć podstawową pamięć 1 GB
- Jeśli uruchomię Menedżera zadań w systemie operacyjnym gościa, widzę użycie pamięci 430 MB
- Jeśli uruchomię Menedżera zadań w systemie operacyjnym hosta, widzę 3 procesy, które wydają się należeć do VirtualBox:
- VirtualBox.exe (1), korzystający z 60 MB pamięci (ta wydaje się mieć największe użycie procesora)
- VirtualBox.exe (2), wykorzystujący 20 MB pamięci
- VBoxSvc.exe, wykorzystujący 11,5 MB pamięci
- Podczas uruchamiania maszyny wirtualnej zużycie pamięci przez system operacyjny hosta wynosi około 2 GB
- Kiedy wyłączam maszynę wirtualną, system operacyjny hosta wraca do użycia pamięci i spada do około 900 MB
Jasne jest, że istnieją tutaj ogromne różnice. Naprawdę nie rozumiem, w jaki sposób GuestOS może korzystać z ponad 400 MB, podczas gdy system operacyjny hosta pokazuje tylko około 75 MB przydzielonych do maszyny wirtualnej. Czy są jakieś inne procesy używane przez VirtualBox, które nie są tak wyraźnie nazwane?
Chciałbym również wiedzieć, czy jeśli uruchomię komputer o pojemności 1 GB, czy zabierze mi to 1 GB z mojego systemu operacyjnego, czy tylko tyle pamięci, ile aktualnie używa maszyna gościa?
Aktualizacja:
Ktoś wyraził nieufność do moich numerów wykorzystania pamięci i nie jestem pewien, czy ta nieufność była skierowana przeciwko mnie, czy raportowi Menedżera zadań mojego hosta (który jest być może winowajcą), ale dla wszystkich sceptyków, oto zrzut ekranu z tych procesów na maszynie głównej:
źródło
Odpowiedzi:
Jedyne miejsce w Menedżerze zadań, które wydaje się odzwierciedlać pełną kwotę, znajduje się na karcie wydajności - wartość Total Commit Charge w przybliżeniu dotrzymuje kroku kwocie przydzielonej do maszyny wirtualnej. Właśnie zamknąłem jeden z przydzielonym 1536 MB, a opłata za zatwierdzenie spadła z około 2,4 GB do 0,8 GB. Możesz do pewnego stopnia monitorować to za pomocą Virtual Box za pomocą Monitora wydajności i wybierając liczniki Process: Private Bytes dla VirtualBox, VBoxSvc, a także VirtualBox # 1, # 2 itd. (Po jednym dla każdej uruchomionej maszyny wirtualnej). Istnieje również licznik Pamięć: Zatwierdzone bajty na wszystko.
źródło
Aby zrozumieć architekturę procesu VirtualBox, zobacz
Architektura VirtualBox :
Jeśli chodzi o pamięć, instrukcja obsługi stanowi:
Oznacza to, że gość wychodzi z hosta:
Zawsze jest możliwe, że instrukcja VirtualBox ma kilka wersji za sobą, a najnowsze techniki optymalizacji pamięci nie są udokumentowane.
Ponadto VirtualBox może optymalizować wykorzystanie pamięci, nie przydzielając całej zdefiniowanej pamięci VM.
Przydzielanie pamięci zgodnie z wymaganiami jest optymalizacją, która może znacznie zaoszczędzić na pamięci fizycznej, ale procesy intensywnie wykorzystujące pamięć na maszynie wirtualnej mogą zostać spowolnione przez częstą potrzebę VirtualBox żądania więcej pamięci hosta.
źródło
Wygląda to na problem z Windows. Zobacz trzeci post tutaj: http://forum.sysinternals.com/pe-is-not-showing-all-memory-used-by-virtualbox_topic23886.html
Korzystanie z programu takiego jak VMMap zdecydowanie pokazuje, że pamięć, o której mówisz VBox, jest faktycznie używana. Nie mam pojęcia, dlaczego nie jest to widoczne dla menedżera zadań ani eksploratora procesów.
źródło
Wpisy widoczne w menedżerze zadań TaskManager nie dotyczą maszyny wirtualnej, lecz GUI VirtualBox. Karta wydajności wyraźnie pokaże, ile pamięci jest zużyte, ale bez szczegółowości procesów. Osobiście chciałbym, aby VBox używał tylko tego, czego potrzebuje, ale zgadzam się, że ważne jest, aby mógł używać tyle, ile się spodziewa, stąd też ring-fencing.
źródło
Może to być powiązane z dodatkami gości VirtualBox.
Moja instalacja Ubuntu używa obecnie ~ 20 MB, jak donosi WinXP. To jest z VBoxAdditions.
Moja instalacja w Lubuntu używa obecnie ~ 90 MB, jak donosi WinXP. Właśnie go zainstalowałem; VBoxAdditions nie zostały zainstalowane.
Zużycie pamięci zależy od tego, co robi maszyna wirtualna. Mam moją instalację Ubuntu z systemem ziproxy; kiedy robię coś, co mówi ziproxy, zużycie pamięci zwiększa się o kilka megabajtów, gdy maszyna wirtualna zaczyna działać.
Ogólnie jednak wirtualizacja jest na tyle zaawansowana, że specyfikacje widoczne dla gościa nie muszą być w całości przydzielane przez hosta. Wydaje się używać dynamicznej alokacji i mocnego stronicowania.
źródło
Patrzysz na to, co jest używane na hoście, a nie na to, co jest przydzielane . Gość nie używa jeszcze ponad 400 MB pamięci RAM hosta.
Zarezerwuje 1 GB pamięci RAM, jednak może skończyć przy użyciu znacznie mniejszej ilości. Jeśli gość nie używa części tej pamięci, pamięć RAM hosta może być używana do wielu innych celów (takich jak buforowanie stron czystego dysku), nawet jeśli jest zarezerwowana dla gościa. I nawet jeśli gość korzysta z części tej pamięci, jeśli nie ma dostępu do niej wystarczająco długo, nadal może zostać wyrzucony z pamięci fizycznej poprzez zamianę oportunistyczną.
Niestety, wdałeś się w niezwykle skomplikowany problem i jego wyjaśnienie zajęłoby wiele stron. W odpowiedziach na to pytanie jest wiele niepoprawnych informacji.
źródło
Możesz to zobaczyć za pomocą doskonałej aplikacji VMMap SysInternals :
VBoxSVC.exe
,VBoxHeadless.exe
jeśli uruchomiona jest maszyna wirtualna , powinien mieć kilka procesów potomnychVBoxHeadless.exe
procesów, wybierz odpowiednią gałąź, sprawdzając wiersz poleceń procesu, zawiera on identyfikator maszyny wirtualnejVBoxHeadless.exe
w branży (tzn. Nie ma już dzieci, tylko rodzic, więc to liść), pamiętaj o jego PIDVBoxHeadless.exe
proces według jego PID i kliknij OKW moim przypadku, wszystkie zgłoszone prywatnych bajtów , ustawić roboczą i Committed pamięć VMMap niemal dokładnie dopasować ilość pamięci przypisanej do VM w VirtualBox.
źródło