Làm thế nào các máy ảo có thể tiêu thụ rất ít RAM trên máy chủ vật lý?


24

Tôi đang chạy VirtualBox trên máy Windows XP có RAM 2GB. Tôi đã tạo một máy Ubuntu ảo và cấp cho nó bộ nhớ cơ bản là 750 MB.

Chỉ cần đưa nó vào thử nghiệm, tôi đã chạy 20 thứ cùng một lúc trên máy ảo. Theo "top" trong Ubuntu, 750 megs bộ nhớ đã được sử dụng, cũng như không gian trao đổi đáng kể.

Tuy nhiên, trở lại trong Trình quản lý tác vụ Windows, VitrualBox chỉ sử dụng 45.000K bộ nhớ. Khi tôi yêu cầu máy ảo làm nhiều hơn và nhiều hơn nữa, việc sử dụng CPU của quá trình VirtualBox tăng lên (trong Windows) nhưng việc sử dụng bộ nhớ vẫn giữ nguyên.

Làm thế nào một máy ảo đang sử dụng bộ nhớ 750 MB chỉ có thể tiêu thụ 45 MB bộ nhớ trên một máy vật lý?

Tôi giả sử câu trả lời là máy ảo không sử dụng bộ nhớ thực, mà là bộ nhớ mô phỏng (tức là không gian hoán đổi), nhưng nó chắc chắn cảm thấy linh hoạt giống như nó đang chạy trong RAM.

CẬP NHẬT: Tôi đã chơi xung quanh với perfmon như đề xuất. Ngay cả khi tóm tắt tất cả mọi thứ tôi có thể nghĩ ra, nó dường như vẫn chiếm ít hơn 300 megs ... vì vậy nó vẫn còn là một bí ẩn.

Process               VirtualBox     VirtualBox#1     Total
PoolNonpagedBytes     5,840          42,552           48,392
PoolPagedBytes        119,796        166,892          286,688
PrivateBytes          8,884,224      52,719,616       61,603,840
VirtualBytes          75,939,840     161,202,176      237,142,016
Sum                   84,949,700     214,131,236      299,080,936

Câu trả lời:


7

Các cột trong Trình quản lý tác vụ có thể đưa ra các số liệu sai lệch - để sử dụng bộ nhớ chính xác cho mỗi quy trình, bạn có thể sử dụng perfmon (Trình theo dõi hiệu suất trong Bảng điều khiển) và xem các số liệu "byte riêng tư".

Để hiển thị này, đi vào perfmon, nhấp để thêm bộ đếm (Tôi là một người Ctrl+ Iloại người). "Đối tượng hiệu suất" sẽ là "Quá trình", với "Các byte riêng tư" nằm trong danh sách bộ đếm - rõ ràng bạn cần chọn quy trình có liên quan từ danh sách bên phải.


Chào. Tôi đã thử điều này nhưng không có may mắn tìm thấy bất cứ thứ gì gọi là Private Bytes. Bạn có thể đưa ra một bước từng bước?
dggoldst

Đã thêm ...
Rowland Shaw

Cảm ơn, điều này rất hữu ích. Tôi đã thêm phân tích vào câu hỏi. Vẫn không thể hiểu tại sao nó không tổng cộng đến 750 mặc dù.
dggoldst

Rất kỳ quặc. Tôi có thể chỉ ra rằng PrivateBytes là một tập hợp con của VirtualBytes (byte ảo là tỷ lệ không gian địa chỉ được phân bổ, trong khi byte riêng là bộ nhớ chưa được giải phóng - bạn có thể bị phân mảnh bộ nhớ với rò rỉ bộ nhớ nhỏ và có các ứng dụng chết với bộ nhớ không đủ, ngay cả khi có sẵn nhiều). Có thể là trình điều khiển ảo hóa đang phân bổ bộ nhớ theo cách có nghĩa là nó sẽ không hiển thị, điều này sẽ có ý nghĩa vì bộ nhớ sẽ không bị phân tán ra đĩa.
Rowland Shaw

Trong bốn bộ đếm bạn đặt trong bảng của mình, chỉ có "PoolNonPagedBytes" là số lượng bộ nhớ ảo không thể truy cập được, do đó số lượng bộ nhớ vật lý sẽ được sử dụng. Các bộ nhớ khác đều là ảo. Giống như bất kỳ kích thước bộ nhớ ảo nào khác, RAM thực tế mà nó sử dụng hầu như luôn luôn ít hơn nhiều, đó là một trong những điểm của bộ nhớ ảo.
Jamie Hanrahan

5

Với một số giải pháp ảo hóa trong Linux, cách chúng phân bổ bộ nhớ làm cho nó xuất hiện trong nhân máy chủ dưới dạng tệp ánh xạ bộ nhớ đặc biệt (giống như /proc/kcoretệp đặc biệt), do đó, nó được tính vào số lượng "được lưu trong bộ nhớ cache" trong đầu ra free, chứ không phải "đã sử dụng" đếm.

Tôi đoán điều gì đó tương tự đang xảy ra với môi trường Windows của bạn: 45Mb sẽ được sử dụng bởi các quy trình quản lý của VirtualBox và 750 được phân bổ cho chính VM sẽ được tính ở nơi khác.


0

Nó có thể là bộ nhớ ảo, tập tin ánh xạ bộ nhớ hoặc một cái gì đó tương tự.

Bạn đã thử hiển thị các cột khác trong Trình quản lý tác vụ chưa?


0

Đừng tin Trình quản lý tác vụ. Nó không thể nhìn thấy mọi thứ.

Vấn đề này được nhìn thấy rõ hơn với SQL Server, ví dụ với Sql, tôi chưa bao giờ tìm thấy ai nói cho tôi cách nhận thông tin chính xác từ Trình quản lý tác vụ, điều này sẽ khiến tôi tin rằng con số không bị ẩn trong một trong những các cột khác.

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.