Việc sử dụng bộ nhớ của VirtualBox hoạt động như thế nào?


38

Tôi đã chạy một số máy ảo với VirtualBox và việc sử dụng bộ nhớ được báo cáo từ nhiều khía cạnh khác nhau và tôi gặp khó khăn khi tìm hiểu xem máy ảo của tôi thực sự sử dụng bao nhiêu bộ nhớ. Đây là một ví dụ:

  • Tôi có máy ảo chạy Windows 7 (với tư cách là Hệ điều hành khách) trên máy chủ Windows XP của tôi.
  • Máy chủ có 3 GB RAM
  • Guest VM được thiết lập để có bộ nhớ cơ bản 1 GB
  • Nếu tôi chạy Task Manger trên Hệ điều hành khách, tôi thấy mức sử dụng bộ nhớ là 430 MB
  • Nếu tôi chạy Task Manger trên hệ điều hành máy chủ, tôi thấy 3 quy trình dường như thuộc về VirtualBox:
    1. VirtualBox.exe (1), sử dụng 60 MB bộ nhớ (Cái này dường như có mức sử dụng CPU nhiều nhất)
    2. VirtualBox.exe (2), sử dụng 20 MB bộ nhớ
    3. VBoxSvc.exe, sử dụng 11,5 MB bộ nhớ
  • Trong khi chạy VM, mức sử dụng bộ nhớ của HĐH máy chủ là khoảng 2 GB
  • Khi tôi tắt VM, hệ điều hành máy chủ sẽ quay trở lại mức sử dụng bộ nhớ xuống còn khoảng 900 MB

Vì vậy, rõ ràng, có một số khác biệt rất lớn ở đây. Tôi thực sự không hiểu làm thế nào GuestOS có thể sử dụng hơn 400 MB, trong khi Hệ điều hành máy chủ chỉ hiển thị khoảng 75 MB được phân bổ cho VM. Có các quy trình khác được sử dụng bởi VirtualBox không được đặt tên rõ ràng không?

Ngoài ra, tôi muốn biết nếu tôi chạy một máy có 1 GB, điều đó sẽ lấy đi 1 GB khỏi hệ điều hành máy chủ của tôi hay chỉ dung lượng bộ nhớ mà máy Guest hiện đang sử dụng?

Cập nhật:

Ai đó đã thể hiện sự không tin tưởng vào các con số sử dụng bộ nhớ của tôi và tôi không chắc liệu sự ngờ vực đó có nhắm vào tôi hay báo cáo của Trình quản lý tác vụ máy chủ của tôi (có lẽ là thủ phạm), nhưng đối với bất kỳ sự hoài nghi nào, đây là ảnh chụp màn hình của các quy trình đó trên máy chủ:

Trình quản lý tác vụ VirtualBox


Tôi đã tự hỏi điều tương tự chính xác vào đầu ngày hôm nay khi chạy hai máy ảo VBox cùng một lúc.
MartW

Trong Trình quản lý tác vụ, bật một số cột bộ nhớ khác (Xem-> Chọn Cột ...). Bộ nhớ được tính theo nhiều cách khác nhau trong Windows. Chẳng hạn, "kích thước cam kết" có thể cao hơn đáng kể so với "Sử dụng bộ nhớ". Chính xác nên sử dụng và làm thế nào để giải thích chúng là một câu chuyện khác nhau.
lilbyrdie

Bản sao có thể có: superuser.com/q/17266/302
Rowland Shaw

Câu trả lời:


12

Vị trí duy nhất trong Trình quản lý tác vụ dường như phản ánh toàn bộ số tiền là trên tab hiệu suất - giá trị Tổng phí cam kết theo kịp với số tiền được phân bổ cho VM. Tôi vừa đóng một cái với 1536 MB được phân bổ và phí cam kết giảm từ khoảng 2,4 GB xuống còn 0,8 GB. Bạn có thể theo dõi ở một mức độ nào đó với Virtual Box bằng Trình theo dõi hiệu suất và chọn Bộ đếm: Bộ đếm byte riêng cho VirtualBox, VBoxSvc và VirtualBox # 1, # 2, v.v. (một cho mỗi VM đang chạy). Ngoài ra còn có bộ nhớ: Bộ đếm byte được cam kết cho tất cả mọi thứ.


OP dường như không quan tâm đặc biệt đến những gì được phân bổ mặc dù đang hỏi về những gì đang được sử dụng. Vì vậy, tôi không chắc làm thế nào điều này liên quan đến câu hỏi của anh ấy.
David Schwartz

12

Để hiểu kiến ​​trúc quy trình của VirtualBox, hãy xem
Kiến trúc VirtualBox :

Khi bạn khởi động máy ảo (VM) từ GUI, bạn có hai cửa sổ (cửa sổ chính và VM), nhưng ba quá trình đang chạy. Nhìn vào hệ thống của bạn từ Trình quản lý tác vụ (trên Windows) hoặc một số trình giám sát hệ thống (trên Linux), bạn sẽ thấy:

  1. VirtualBox, GUI cho cửa sổ chính;
  2. Một quy trình VirtualBox khác được bắt đầu với tham số -startvm, có nghĩa là quy trình GUI của nó hoạt động như một vỏ cho VM;
  3. VBoxSVC, dịch vụ được đề cập ở trên, đang chạy trong nền để theo dõi tất cả các quy trình liên quan. Điều này đã được tự động bắt đầu bởi quá trình GUI đầu tiên.

Liên quan đến bộ nhớ, Hướng dẫn sử dụng nêu rõ:

Bộ nhớ cơ sở

Cái này đặt lượng RAM được phân bổ và cấp cho VM khi nó đang chạy. Dung lượng bộ nhớ đã chỉ định sẽ được yêu cầu từ hệ điều hành máy chủ, do đó, nó phải có sẵn hoặc được cung cấp dưới dạng bộ nhớ trống trên máy chủ khi cố gắng khởi động VM và sẽ không khả dụng cho máy chủ trong khi VM đang chạy. Đây là cùng một cài đặt đã được chỉ định trong trình hướng dẫn "Máy ảo mới", như được mô tả với các hướng dẫn trong phần có tên là Tạo một máy ảo ảo ở trên.

Điều này có nghĩa là khách đưa ra khỏi máy chủ:

  • Nhiều bộ nhớ như đã được khai báo với
  • Mỗi VM cũng là một VirtualBox thực thi, vì vậy bạn cần thêm bộ nhớ của nó.

Luôn luôn có thể hướng dẫn VirtualBox là một số phiên bản phía sau và kỹ thuật tối ưu hóa bộ nhớ mới nhất không được ghi lại.

Ngoài ra, VirtualBox có thể tối ưu hóa việc sử dụng bộ nhớ bằng cách không phân bổ toàn bộ bộ nhớ VM được xác định.

Phân bổ bộ nhớ theo yêu cầu là một tối ưu hóa có thể tiết kiệm rất nhiều bộ nhớ vật lý, nhưng các quy trình sử dụng nhiều bộ nhớ trong VM có thể bị chậm lại do nhu cầu thường xuyên của VirtualBox để yêu cầu thêm bộ nhớ máy chủ.


8
Nó không phải là VirtualBox cụ thể - xem phần này: serverfault.com/questions/19935/ cấp
MartW

@harrymc, vậy điều bạn đang nói là trình quản lý tác vụ KHÔNG hiển thị trong danh sách quy trình có bao nhiêu hộp ảo đang sử dụng?
Trevor Boyd Smith

@TrevorBoydSmith: Tất cả những gì tôi đang nói là có nhiều hơn một quy trình liên quan và chọn chính xác các cột trong trình quản lý tác vụ.
harrymc

2
vm của tôi chiếm 1,2 GB. trên trình quản lý tác vụ, nó chỉ hiển thị 60MB. vì vậy tôi sẽ tuyên bố rằng trình quản lý tác vụ không hiển thị tất cả bộ nhớ mà vm của tôi đang sử dụng. trừ khi bạn bằng cách nào đó có thể chỉ cho tôi cách điều chỉnh trình quản lý tác vụ để hiển thị 1.2gb.
Trevor Boyd Smith

1
Toàn bộ cuộc trò chuyện này và tất cả các câu trả lời chỉ là những biến thể về sự nhầm lẫn giữa bộ nhớ ảo và bộ nhớ vật lý.
David Schwartz


2

Những mục bạn thấy trong Trình quản lý tác vụ không dành cho máy ảo của bạn, chúng dành cho VirtualBox GUI. Tab hiệu suất sẽ cho bạn thấy rõ tổng số bộ nhớ của bạn đang được sử dụng, nhưng không có độ chi tiết liên quan đến các quy trình. Cá nhân tôi muốn thấy VBox chỉ sử dụng những gì nó cần, nhưng đồng ý rằng điều quan trọng là nó có thể sử dụng nhiều như mong đợi, do đó, đấu kiếm vòng tròn.


1

Có thể liên quan đến Bổ sung khách VirtualBox.

Cài đặt Ubuntu của tôi hiện đang sử dụng ~ 20 MB như báo cáo của WinXP. Đây là với VBoxAdditions.

Bản cài đặt LubFi của tôi hiện đang sử dụng ~ 90MB theo báo cáo của WinXP. Chỉ cần cài đặt nó; VBoxAdditions chưa được cài đặt.

Việc sử dụng bộ nhớ không thay đổi tùy theo những gì VM đang làm. Tôi có cài đặt Ubuntu chạy ziproxy; Khi tôi làm điều gì đó nói chuyện với ziproxy, việc sử dụng bộ nhớ tăng vọt vài megabyte khi VM được sử dụng.

Tuy nhiên, nói chung, ảo hóa đã tiến xa đến mức các thông số kỹ thuật rõ ràng cho khách không cần phải được phân bổ toàn bộ từ máy chủ. Có vẻ để sử dụng phân bổ động, và phân trang mạnh mẽ.


1

Vì vậy, rõ ràng, có một số khác biệt rất lớn ở đây. Tôi thực sự không hiểu làm thế nào GuestOS có thể sử dụng hơn 400 MB, trong khi Hệ điều hành máy chủ chỉ hiển thị khoảng 75 MB được phân bổ cho VM. Có các quy trình khác được sử dụng bởi VirtualBox không được đặt tên rõ ràng không?

Bạn đang xem những gì đang được sử dụng trên máy chủ, không phải những gì đang được phân bổ . Khách không sử dụng hơn 400 MB RAM của máy chủ (chưa).

Ngoài ra, tôi muốn biết nếu tôi chạy một máy có 1 GB, điều đó sẽ lấy đi 1 GB khỏi hệ điều hành máy chủ của tôi hay chỉ dung lượng bộ nhớ mà máy Guest hiện đang sử dụng?

Nó sẽ dự trữ 1GB RAM, tuy nhiên nó có thể thực sự sử dụng ít hơn đáng kể. Nếu khách không sử dụng một số bộ nhớ đó, RAM máy chủ có thể được sử dụng cho nhiều mục đích khác (chẳng hạn như lưu trữ các trang đĩa sạch), mặc dù nó dành riêng cho khách. Và ngay cả khi khách không sử dụng một số bộ nhớ đó, nếu nó không truy cập đủ lâu, nó vẫn có thể bị đẩy ra khỏi bộ nhớ vật lý thông qua trao đổi cơ hội.

Thật không may, bạn đã đi sâu vào một vấn đề cực kỳ phức tạp và sẽ mất nhiều trang để thực sự giải thích nó. Có rất nhiều thông tin không chính xác trong câu trả lời cho câu hỏi này.


0

Bạn có thể thấy nó bằng VMMap của ứng dụng tuyệt vời của SysIternals :

  1. Trước tiên, bạn cần tìm đúng quy trình, vì vậy hãy bắt đầu ví dụ Process Hacker hoặc SysIternals 'Process Explorer
  2. Hiển thị danh sách các quy trình dưới dạng cây
  3. Xác định vị trí tiến trình VBoxSVC.exe, nó sẽ có một vài tiến trình con VBoxHeadless.exenếu VM đang chạy
  4. Nếu nhiều máy ảo đang chạy, sẽ có nhiều nhánh VBoxHeadless.exequy trình, chọn nhánh phải bằng cách kiểm tra dòng lệnh của quy trình, nó chứa mã định danh VM của bạn
  5. Bạn quan tâm đến mức thấp nhất VBoxHeadless.exetrong chi nhánh (nghĩa là nó không có thêm con, chỉ là cha mẹ, vì vậy nó là một chiếc lá), hãy nhớ đến PID của nó
  6. Bắt đầu VMMap
  7. Chọn đúng VBoxHeadless.exequy trình của nó và bấm OK

Trong trường hợp của tôi, tất cả các báo cáo byte cá nhân , bộ làm việccam kết bộ nhớ bằng cách VMMap gần như chính xác phù hợp với dung lượng bộ nhớ được gán cho máy ảo trong VirtualBox.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.