VirtualBox의 메모리 사용량은 어떻게됩니까?


38

VirtualBox를 사용하여 여러 VM을 실행하고 있으며 메모리 사용량이 다양한 관점에서보고되었으며 내 VM에서 실제로 사용하는 메모리 양을 파악하는 데 문제가 있습니다. 예를 들면 다음과 같습니다.

  • Windows XP 호스트 컴퓨터에 게스트 OS로 Windows 7을 실행하는 VM이 ​​있습니다.
  • 호스트 시스템에는 3GB의 RAM이 있습니다.
  • 게스트 VM은 1GB의 기본 메모리를 갖도록 설정되었습니다.
  • 게스트 OS에서 작업 관리자를 실행하면 430MB의 메모리 사용량이 표시됩니다.
  • 호스트 OS에서 Task Manger를 실행하면 VirtualBox에 속하는 것으로 보이는 3 개의 프로세스가 표시됩니다.
    1. 60MB의 메모리를 사용하는 VirtualBox.exe (1) (이것은 CPU 사용량이 가장 많은 것 같습니다)
    2. 20MB의 메모리를 사용하는 VirtualBox.exe (2)
    3. 11.5MB의 메모리를 사용하는 VBoxSvc.exe
  • VM을 실행하는 동안 호스트 OS의 메모리 사용량은 약 2GB입니다.
  • VM을 종료하면 호스트 OS가 메모리 사용량으로 돌아가고 약 900MB로 줄어 듭니다.

분명히 여기에는 큰 차이점이 있습니다. 게스트 OS가 400 MB 이상을 사용하는 방법을 이해하지 못하는 반면 호스트 OS는 VM에 할당 된 약 75MB 만 보여줍니다. VirtualBox가 사용하지 않는 다른 프로세스가 있습니까?

또한 1GB의 컴퓨터를 실행하고 있는지, 호스트 OS에서 1GB를 가져 가거나, 게스트 컴퓨터에서 현재 사용중인 메모리 양만 알고 있는지 알고 싶습니다.

최신 정보:

누군가 내 메모리 사용량에 대해 불신을 표명했는데, 그 불신이 나에게 직접 전달되었는지 또는 호스트 OS의 작업 관리자의보고 (아마도 범인 일 것임)에 대해 확신하지 못하지만 회의론자들을 위해 여기에 해당 프로세스의 스크린 샷이 있습니다. 호스트 머신에서 :

VirtualBox 작업 관리자


오늘 두 개의 VBox VM을 한 번에 실행할 때 정확히 똑같은 것이 궁금합니다.
MartW

작업 관리자에서 다른 메모리 열 중 일부를 켭니다 (보기-> 열 선택 ...). 메모리는 Windows에서 여러 가지 방식으로 계산됩니다. 예를 들어, "커밋 크기"는 "메모리 사용"보다 훨씬 높을 수 있습니다. 정확히 어떤 것을 사용해야하고 어떻게 해석하는지는 다른 이야기입니다.
lilbyrdie

답변:


12

전체 금액을 반영하는 것으로 보이는 작업 관리자의 유일한 장소는 성능 탭에 있습니다. 총 커밋 요금 값은 대략 VM에 할당 된 금액과 거의 일치합니다. 방금 1536MB가 할당 된 것을 닫았으며 커밋 요금이 약 2.4GB에서 0.8GB로 줄었습니다. 성능 모니터를 사용하고 VirtualBox, VBoxSvc 및 VirtualBox # 1, # 2 등의 Process : Private Bytes 카운터 (각 실행중인 VM마다 하나씩)를 선택하여 Virtual Box에 대해이를 어느 정도 모니터링 할 수 있습니다. Memory : Committed Bytes 카운터도 모든 것을 갖추고 있습니다.


OP는 특별히 할당 된 것에 관심이없는 것 같지만 사용중인 것에 대해 묻고 있습니다. 그래서 이것이 그의 질문과 어떻게 관련이 있는지 잘 모르겠습니다.
David Schwartz

12

VirtualBox의 프로세스 아키텍처를 이해하려면
VirtualBox 아키텍처를 참조하십시오 .

GUI에서 가상 머신 (VM)을 시작하면 두 개의 창 (기본 창과 VM)이 있지만 세 개의 프로세스가 실행됩니다. 작업 관리자 (Windows) 또는 일부 시스템 모니터 (Linux)에서 시스템을 보면 다음과 같은 결과가 나타납니다.

  1. 기본 창의 GUI 인 VirtualBox;
  2. -startvm 매개 변수로 시작한 다른 VirtualBox 프로세스는 GUI 프로세스가 VM의 쉘 역할을한다는 것을 의미합니다.
  3. 위에서 언급 한 서비스 인 VBoxSVC는 관련된 모든 프로세스를 추적하기 위해 백그라운드에서 실행됩니다. 이것은 첫 번째 GUI 프로세스에 의해 자동으로 시작되었습니다.

메모리와 관련하여 사용 설명서 는 다음 과 같이 말합니다.

베이스 메모리

VM이 실행될 때 할당되고 할당되는 RAM의 양을 설정합니다. 지정된 양의 메모리가 호스트 운영 체제에서 요청되므로 VM을 시작하려고 할 때 호스트에서 사용 가능한 메모리로 사용 가능하거나 사용 가능한 메모리로 사용 가능해야하며 VM이 실행되는 동안 호스트에서 사용할 수 없습니다. 위의 "가상 머신 생성"섹션에서 지침에 설명 된대로 "새 가상 머신"마법사에서 지정한 것과 동일한 설정입니다.

이는 게스트가 호스트를 꺼내는 것을 의미합니다.

  • 선언 된만큼의 메모리
  • 각 VM은 VirtualBox 실행 파일이기도하므로 메모리를 추가해야합니다.

VirtualBox 매뉴얼이 여러 버전 뒤에 있으며 최신 메모리 최적화 기술이 문서화되어 있지 않을 수도 있습니다.

또한 VirtualBox는 정의 된 전체 VM 메모리를 할당하지 않아 메모리 사용을 최적화 할 수 있습니다.

필요에 따라 메모리를 할당하면 물리적 메모리를 많이 절약 할 수있는 최적화가 이루어 지지만 VirtualBox가 더 많은 호스트 메모리를 요청해야하는 경우 VM의 메모리 집약적 프로세스 속도가 느려질 수 있습니다.


8
그것은 버추얼 특정 아니다 -이 참조 : serverfault.com/questions/19935/...
MartW

@harrymc, 당신이 말하는 것은 작업 관리자가 프로세스 목록에 가상 상자가 얼마나 많은 메모리 상자를 사용하고 있지 않습니까?
Trevor Boyd Smith

@ TrevorBoydSmith : 내가 말하고 싶은 것은 둘 이상의 프로세스가 관련되어 있고 작업 관리자에서 열을 올바르게 선택한다는 것입니다.
harrymc

2
내 vm은 1.2GB를 차지합니다. 작업 관리자에는 60MB 만 표시됩니다. 따라서 작업 관리자에 내 VM이 사용하는 모든 메모리가 표시되지 않는다고 주장합니다. 1.2GB를 표시하도록 작업 관리자를 조정하는 방법을 어떻게 든 보여줄 수 없다면.
Trevor Boyd Smith

1
이 전체 대화와 모든 답변은 가상 메모리와 실제 메모리의 혼동에 대한 변형입니다.
David Schwartz


2

TaskManager에 표시되는 항목은 가상 머신 용이 아니며 VirtualBox GUI 용입니다. 성능 탭에는 사용중인 총 메모리 양이 명확하게 표시되지만 프로세스와 관련하여 세분화되지는 않습니다. 개인적으로 VBox가 필요한 것만 사용하고 싶지만 기대하는만큼 사용할 수 있으므로 링 펜싱이 중요하다는 데 동의합니다.


1

VirtualBox Guest Additions와 관련이있을 수 있습니다.

내 Ubuntu 설치는 현재 WinXP에서보고 한대로 ~ 20MB를 사용하고 있습니다. 이것은 VBoxAdditions와 함께입니다.

내 Lubuntu 설치는 현재 WinXP에서보고 한대로 ~ 90MB를 사용하고 있습니다. 방금 설치했습니다. VBoxAdditions가 설치되지 않았습니다.

메모리 사용량은 VM이 수행하는 작업에 따라 다릅니다. ziproxy를 실행하는 Ubuntu 설치가 있습니다. ziproxy와 대화하는 작업을 수행하면 VM이 사용되면서 메모리 사용량이 몇 메가 바이트 급증합니다.

그러나 일반적으로 가상화는 게스트에게 명백한 사양을 호스트에서 완전히 할당 할 필요가 없을 정도로 충분히 발전했습니다. 동적 할당 및 강력한 페이징을 사용하는 것 같습니다.


1

분명히 여기에는 큰 차이점이 있습니다. 게스트 OS가 400 MB 이상을 사용하는 방법을 이해하지 못하는 반면 호스트 OS는 VM에 할당 된 약 75MB 만 보여줍니다. VirtualBox가 사용하지 않는 다른 프로세스가 있습니까?

할당 된 대상 이 아닌 호스트에서 사용 중인 대상을보고 있습니다. 게스트가 400MB 이상의 호스트 RAM (아직)을 사용하고 있지 않습니다.

또한 1GB의 컴퓨터를 실행하고 있는지, 호스트 OS에서 1GB를 가져 가거나, 게스트 컴퓨터에서 현재 사용중인 메모리 양만 알고 있는지 알고 싶습니다.

1GB의 RAM을 예약하지만 실제로는 그보다 훨씬 적은 양을 사용하여 감길 수 있습니다. 게스트가 해당 메모리 중 일부를 사용하지 않으면 게스트 용으로 예약되어 있어도 호스트 RAM을 다른 많은 용도 (예 : 클린 디스크 페이지 캐싱)에 사용할 수 있습니다. 그리고 게스트가 해당 메모리의 일부를 사용하더라도 충분한 시간 동안 액세스하지 않으면 기회 적 스와핑을 통해 물리적 메모리에서 여전히 배출 될 수 있습니다.

불행히도, 당신은 매우 복잡한 문제로 넘어 갔으며 실제로 그것을 설명하기 위해서는 많은 페이지가 필요합니다. 이 질문에 대한 답에는 잘못된 정보가 많이 있습니다.


0

SysInternals의 훌륭한 응용 프로그램 VMMap을 사용하여 볼 수 있습니다 .

  1. 먼저 올바른 프로세스를 찾아야합니다. 예를 들어 Process Hacker 또는 SysInternals의 Process Explorer를 시작하십시오.
  2. 프로세스 목록을 트리로 표시
  3. 프로세스를 찾습니다. VM이 실행중인 경우 VBoxSVC.exe여러 개의 하위 프로세스가 있어야 VBoxHeadless.exe합니다.
  4. 여러 개의 VM이 실행중인 경우 여러 개의 VBoxHeadless.exe프로세스 분기가 있으며 프로세스의 명령 줄을 확인하여 올바른 분기를 선택하면 VM의 식별자가 포함됩니다.
  5. 당신은 VBoxHeadless.exe지점 에서 가장 낮은 것에 관심이 있습니다 (즉, 더 이상 자녀가 없으며 부모 만 있으므로 잎입니다) PID를 기억하십시오
  6. VMMap 시작
  7. VBoxHeadless.exePID별로 올바른 프로세스를 선택하고 확인을 클릭하십시오.

필자의 경우 VMMap의 모든보고 된 Private bytes , Working setCommitted memory는 VirtualBox의 VM에 할당 된 메모리 양과 거의 정확히 일치합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.