> For the complete documentation index, see [llms.txt](https://docs.verge.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.verge.io/knowledge-base/zh/virtual-machines/guest-memory-management.md).

# 了解 VergeOS 虚拟机内存管理

## 概述

与 VMware 和 Nutanix 等平台相比，VergeOS 采用了不同的虚拟机内存管理方式。要做好容量规划、性能优化和故障排查，理解 VergeOS 如何处理内存分配和报告至关重要。本文解释了为什么 VergeOS 的内存使用报告与来宾操作系统的报告不同，以及这种设计选择的优势。

## 您将学到什么

* 为什么 VergeOS 显示的是已分配内存，而不是活动内存使用量
* VergeOS 的内存管理与内存气球技术平台有何不同
* VergeOS 这种方法带来的性能和可靠性优势
* 在主机和来宾层面监控内存的最佳实践
* 这种设计如何提升容量规划和工作负载迁移的可靠性

## 关键概念

### 内存分配与内存使用

**内存分配**：由虚拟机管理程序为虚拟机保留的物理 RAM 数量，不论来宾操作系统和应用程序实际使用了多少。

**内存使用**：虚拟机内部的应用程序和操作系统实际消耗的内存数量。

在 VergeOS 中，当您为 VM 分配 8GB RAM 时，虚拟机管理程序会立即在主机上保留 8GB 的物理内存，即使来宾操作系统显示只使用了 2GB。

### 为什么 VergeOS 显示已分配内存

当内存被分配给 VM 时，无论虚拟机内的应用程序实际上使用了多少，虚拟机管理程序都必须在物理 RAM 中保留全部数量。这是因为来宾操作系统可能在任何时候请求访问其已分配内存的任意部分，而虚拟机管理程序必须保证该内存可用。

VergeOS 显示这种已保留/已分配内存，是因为它代表了主机上实际消耗的物理资源，为容量规划和性能管理提供了资源利用率的真实图景。

## VergeOS 与其他平台的区别

### VergeOS 方法：不使用内存气球技术

VergeOS 有意避免其他虚拟化平台使用的内存气球技术。其主要特征包括：

* **已分配与已使用**：VergeOS 显示分配给每个 VM 的内容，这通常与来宾层面的使用量并不相同
* **性能优先**：这消除了气球技术带来的开销和复杂性
* **可预测的资源分配**：您看到的就是物理主机上实际保留的内容

### 传统的气球技术方法

许多虚拟化平台使用内存气球驱动程序，它们会：

* 向虚拟机管理程序动态报告内存使用情况
* 通过在 VM 之间共享未使用的内存，实现内存“超分配”
* 要求每个来宾操作系统中安装特殊驱动程序（气球驱动）
* 增加内存管理的复杂性，并可能影响性能

## VergeOS 内存管理设计的优势

### 1. 可预测的性能

通过消除气球驱动开销，VergeOS 提供了更可预测的 VM 性能。不存在可能影响应用响应时间或导致意外内存压力的动态内存管理。

### 2. 简化容量规划

借助清晰的分配可见性，管理员可以轻松计算：

* 所有 VM 的总已承诺内存
* 新工作负载可用的内存容量
* 无需复杂气球计算的资源利用率

### 3. 更强的可靠性

VergeOS 避免了气球技术中可能出现的动态内存管理问题，例如：

* 内存回收延迟
* 气球膨胀期间来宾操作系统内存压力
* 内存操作期间应用程序可能出现的不稳定性

### 4. 保证迁移成功

**高可用性的关键**：VergeOS 的方法可确保在节点故障期间工作负载迁移的可预测性。由于完整的已分配内存始终被保留，系统可以保证所有 VM 都能迁移到可用节点，而不会出现内存超分配带来的意外情况。

如果 VergeOS 使用内存气球技术，就无法保证在故障场景下将所有工作负载可靠迁移到另一节点，因为当气球放气时，实际内存需求可能超过目标节点的容量。

{% hint style="warning" %}
**迁移可靠性**

内存气球技术会造成不可预测的迁移场景。当看起来使用较少内存的 VM 在迁移期间突然需要其全部分配内存时，目标节点可能没有足够资源，从而在关键时刻导致迁移失败。
{% endhint %}

## 内存监控最佳实践

### 主机层监控（VergeOS 仪表板）

使用 VergeOS 仪表板监控：

* **总已分配内存** 每个节点上的所有 VM
* **可用物理内存** 用于新的 VM 部署
* **内存利用率趋势** 用于容量规划
* **节点内存状态** 在维护和迁移操作期间

### 来宾层监控

在每个 VM 内，使用适当工具监控：

* **应用程序内存消耗** 用于性能调优
* **操作系统内存使用情况** 用于优化
* **内存泄漏或过度使用** 由特定进程造成
* **来宾层性能指标** 用于故障排查

### 综合监控策略

为了实现全面的内存管理：

1. **容量规划**：使用 VergeOS 的分配数据规划硬件扩容
2. **性能优化**：使用来宾层数据调优应用程序
3. **故障排除**：比较主机分配与来宾使用情况，以识别问题
4. **资源优化**：根据实际来宾使用模式调整 VM 大小

## 实际示例

请考虑以下场景：

* **VM 已分配内存**：8GB（在 VergeOS 中显示）
* **Windows 任务管理器**：显示已使用 3GB
* **物理主机**：为该 VM 保留了 8GB

这是正常且预期的行为。VergeOS 仪表板正确显示该 VM 已承诺使用 8GB 物理内存，而来宾操作系统显示的是其内部对这部分已分配内存的使用情况。

## 排查内存问题

### 当 VergeOS 显示高内存使用率时

如果 VergeOS 显示较高的内存利用率：

1. **检查 VM 分配**：检查 VM 是否相对于实际需求分配过多
2. **规划容量扩展**：较高的分配百分比表明需要更多物理 RAM
3. **优化 VM 规格**：考虑减少利用率较低 VM 的分配

### 当来宾操作系统显示内存压力时

如果应用程序报告内存问题，而 VergeOS 显示仍有可用分配：

1. **检查来宾操作系统配置**：验证 VM 是否分配了足够的内存
2. **检查应用程序需求**：确保分配了足够的内存
3. **监控内存泄漏**：查找随着时间推移消耗过多内存的应用程序

### 内存性能问题

对于与内存相关的性能问题：

1. **验证分配是否充足**：确保 VM 分配了足够的内存
2. **检查主机内存压力**：避免总物理 RAM 超分配
3. **检查存储影响**：内存压力可能导致交换活动增加

## 内存管理最佳实践

### 合理调整虚拟机大小

* 从厂商推荐的内存分配开始
* 随时间监控来宾层使用情况，以发现优化机会
* 避免过度分配，以免浪费物理资源
* 为内存峰值和增长预留足够缓冲

### 容量规划

* 根据所有 VM 的总分配量规划物理内存容量，而不是根据来宾使用量
* 考虑虚拟机管理程序开销和系统内存需求
* 保留 10-15% 的空闲容量用于维护和应对意外需求
* 在规划新节点规格时考虑未来增长

### 性能优化

* 分配足够的内存，以避免来宾操作系统内存压力
* 使用 VM 内的内存监控工具来识别优化机会
* 在规划内存分配时考虑工作负载模式
* 通过不同的内存分配测试应用程序性能

## 下一步

要深入了解 VergeOS 的内存管理：

* [**节点资源监控**](/run-the-platform/system-administration/nodes-overview.md)：了解如何监控物理节点资源
* [**VM 性能优化**](/run-the-platform/virtual-machines/vm-best-practices.md)：了解优化 VM 性能的技术

{% hint style="info" %}
**其他资源**

如果您对环境中的内存分配有具体问题，请联系 VergeOS 支持团队 <support@verge.io>，或查看产品文档中的性能监控部分。
{% endhint %}

***

{% hint style="info" %}
**文档信息**

* 最后更新：2024-08-15
* VergeOS 版本：4.12.6+
  {% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.verge.io/knowledge-base/zh/virtual-machines/guest-memory-management.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
