Proxmox 宿主内存:Windows 虚拟机到底吃多少
31.2GB 宿主跑两台 Windows 11 虚拟机的实测内存占用、为什么远大于来宾分配值,以及怎么规划余量。
测试环境Pro (26H2) / LTSC 2024 · 版本号 26300.9457 / 26100.1742 · x64
E2- 版本号
- 26300.9457 / 26100.1742
- 版本
- Pro (26H2) / LTSC 2024
- 架构
- x64
- 支持
- E2 实验观察
- 证据
- E2实验室复现, 直通虚拟机实测
- 核验日期
- 2026-10-29
- 页面类型
- 方法
来宾内存不等于宿主内存。“32GB 宿主”跑两台 8GB Windows 虚拟机,不会剩 16GB。
本站实验室:Proxmox VE 9.2.2、16 核、31.2GB 内存、两台各 8GB 的 Windows 11 虚拟机,宿主报告约为:
| 指标 | 观测值 |
|---|---|
| 已用 | 约 24GB |
| 可用 | 约 6.7GB |
| Swap 已用 | 约 4.7GB |
这才是规划时该用的数字:16GB 的来宾分配,占了约 24GB 宿主内存。
多出来的内存去哪了
Section titled “多出来的内存去哪了”| 消耗方 | 原因 |
|---|---|
| 来宾工作集 | Windows 会用满给它的量;8GB 来宾常驻 6–7GB |
| QEMU/KVM 开销 | 每个虚拟机进程、设备模型、OVMF、vTPM |
| ZFS ARC | 文件系统缓存会占用很大一块,除非限制 |
| 宿主服务 | PVE 守护进程、容器、监控 |
| Swap | 告诉你宿主已经超配的安全阀 |
ZFS ARC 最容易被忘。ZFS 根上 ARC 默认会吃满内存;它是缓存,有压力会收缩——但也意味着“空闲”数字有误导性,swap 会在你没预料到的时候被用上。
在 PVE 宿主上:
free -hcat /proc/spl/kstat/zfs/arcstats | headqm listqm config 361 | grep -E 'memory|balloon|cores'再从来宾内部:
Get-CimInstance Win32_OperatingSystem | Select-Object @{n='TotalGB';e={[math]::Round($_.TotalVisibleMemorySize/1MB,1)}}, @{n='FreeGB';e={[math]::Round($_.FreePhysicalMemory/1MB,1)}}Get-Counter '\Memory\Available MBytes' -MaxSamples 3如果来宾报告大量空闲内存,而宿主已经在用 swap,那是宿主超配了,不是来宾的问题。
一条经得起现实的规则:
- 给宿主留 2–4GB(PVE + ZFS ARC 下限 + 监控);
- 按 来宾内存 × 1.2 估算真实成本(开销 + 工作集漂移);
- 留 10–15% 不用;
- 永远不要按最后一个 GB 规划。
32GB 宿主:32 − 3 = 29GB 可用,所以两台 8GB 加一台 8GB 已经在边缘,第三台 Windows 虚拟机必须先释放内存——这正是本站实验室记录里的结论。
有用的与没用的调优
Section titled “有用的与没用的调优”| 改动 | 效果 |
|---|---|
限制 ZFS ARC(zfs_arc_max) |
可预测地释放内存;缓存略少 |
给来宾设 balloon |
宿主可在压力下回收;来宾可能变慢 |
| 来宾降到 6GB | 轻负载可以,Windows Update + 浏览器就不够 |
| 关来宾内存压缩 | 不释放有用内存,通常更糟 |
| 加第二台宿主 | 到极限后唯一真正的解法 |
这次观察证明了什么、没证明什么
Section titled “这次观察证明了什么、没证明什么”- 证明:在这台宿主、这些来宾下,两台 8GB Windows 虚拟机吃掉约 24GB 宿主内存,并让宿主进入 swap。
- 没证明:所有 32GB 宿主都这样——ZFS 设置、来宾负载、PVE 版本都会改变数字。
在自己的宿主上重测;上面的方法才是重点。
E2(M-V):宿主数字来自实验室记录中这套双虚拟机配置。本文没有同时在来宾侧采样计数器,因此只把宿主观测作为实测数据引用。