Khi bạn quản lý các máy ảo chạy trên máy chủ ảo hóa (VMWare ESXi hoặc Hyper-V) và phân tích các vấn đề về hiệu suất, bạn khá thường xuyên phải đối mặt với các tình huống khi dung lượng bộ nhớ khả dụng trong hệ điều hành khách nhỏ hơn nhiều so với hệ điều hành thấy (hoặc được gán cho nó). Ví dụ:8 GB bộ nhớ được cấp cho một máy ảo, Trình quản lý tác vụ cho thấy 1 GB trống mặc dù tất cả các tiến trình đang chạy tiêu tốn ít hơn 3 GB. 4 GB còn lại ở đâu?
Theo quy định, hành vi này là do sử dụng tính năng truyền thừa bộ nhớ trong trình siêu giám sát.
Thông báo thừa bộ nhớ là một tính năng siêu giám sát cho phép bạn cấp phát cho các máy ảo nhiều bộ nhớ hơn khả dụng trên một máy chủ vật lý, nhưng không có bất kỳ đảm bảo nào rằng tất cả bộ nhớ được yêu cầu đều có thể được cấp phát tại một thời điểm cụ thể. Overcommit bộ nhớ cho phép phân bổ các máy ảo dày đặc hơn do phân phối bộ nhớ động giữa các máy ảo tùy thuộc vào tải trên máy chủ lưu trữ hiện tại (tài nguyên của các máy ảo nhàn rỗi có thể được phân phối lại giữa các máy ảo được tải nhiều hơn).
Một trong những cơ chế để triển khai thừa bộ nhớ trong VMWare là Bộ nhớ Ballooning . Trong Hyper-V, tính năng tương tự được thực hiện bởi Bộ nhớ động .
Lưu ý . Nhân tiện, cả VMWare và Microsoft đều sử dụng rộng rãi và hiệu quả tính năng nén bộ nhớ để tiết kiệm tài nguyên bộ nhớ (đây cũng là một trong những cách triển khai của công nghệ overcommit bộ nhớ).Trong VMWare ESXi bội thực bộ nhớ (giải nén bộ nhớ ảo) được thực hiện bởi vmmemctl.sys trình điều khiển (có trong VMware Tools), có thể chiếm bộ nhớ vật lý bằng cách tạo một quy trình giả mạo (như thổi phồng một quả bóng bay) trong đó nếu cần. Do đó, lượng bộ nhớ bị chiếm dụng trở nên không khả dụng đối với các ứng dụng khác trong hệ điều hành khách và hypervisor có thể phân phối bộ nhớ trống giữa các máy ảo khác. Trong bộ nhớ động Hyper-V, dmvsc.sys trình điều khiển từ các dịch vụ tích hợp (thành phần Bộ nhớ động VSC) được sử dụng. Cài đặt thừa bộ nhớ do quản trị viên siêu giám sát quản lý.
Làm thế nào bạn có thể phát hiện từ bên trong máy ảo khách rằng nó thực sự có ít bộ nhớ vật lý hơn những gì hệ điều hành khách nhìn thấy?
Hãy xem xét cách phát hiện xem có trình điều khiển bong bóng trong hệ điều hành Windows khách hay không và kích thước của nó. Vì vậy, hãy phân tích ví dụ này.
8 GB bộ nhớ được cấp cho một máy ảo chạy Windows Server 2012 R2 khách. Task Manager cho thấy 93% bộ nhớ được sử dụng (7.4 GB bộ nhớ bị chiếm dụng). Tuy nhiên, nếu bạn tính tổng dung lượng bộ nhớ được sử dụng bởi tất cả các tiến trình đang chạy, bạn có thể đưa ra một kết luận bất ngờ rằng chỉ có 2,5 GB bộ nhớ thực sự được sử dụng. 5 GB còn lại ở đâu? Cả Trình quản lý Tác vụ và Giám sát Tài nguyên đều không thể trả lời câu hỏi này.
Để hiểu những gì đang xảy ra với bộ nhớ, bạn cần sử dụng RamMap công cụ của Mark Russinovich (trong một trong những trường hợp trước đó, tôi đã trình bày cách sử dụng công cụ này để chẩn đoán sự cố do metafile sử dụng bộ nhớ cao trên Windows Server). Tải xuống công cụ từ trang web của Microsoft (https://technet.microsoft.com/en-us/library/ff700229.aspx) và chạy nó với đặc quyền của quản trị viên. Sau đó trên Số lượng sử dụng bạn có thể thấy rằng hầu hết bộ nhớ (5,4 GB) được sử dụng bởi Trình điều khiển đã khóa đối tượng.
Đây là bộ nhớ mà hypervisor đã chiếm và phân phối giữa các máy ảo khác bằng cách sử dụng trình điều khiển bong bóng trong hệ điều hành khách. Có nghĩa là máy chủ hypervisor không có đủ bộ nhớ hoặc quản trị viên hypervisor sử dụng các chính sách giới hạn bộ nhớ cho máy ảo này.
Thống kê bộ nhớ VM hiện tại trong Hyper-V có thể được hiển thị bằng các bộ đếm hiệu suất riêng trong Màn hình hiệu suất:
- Bộ nhớ động Hyper-V -> Bộ nhớ hiển thị của khách
- Bộ nhớ động Hyper-V -> Bộ nhớ vật lý
Để vô hiệu hóa hành vi này, quản trị viên hypervisor phải tắt chức năng Bật bộ nhớ động trong cài đặt Hyper-V của máy ảo (hoặc tăng giá trị đặt trước tối thiểu).
Nếu máy chủ VMWare ESXi được sử dụng, bạn có thể dự trữ thêm bộ nhớ cho máy ảo này trong Cài đặt tài nguyên hoặc dự trữ tất cả bộ nhớ - Bảo lưu tất cả bộ nhớ của khách (Đã khóa tất cả).