PVE 宿主机内存预留(安全标准)
适用:PVE 8 / PVE9,单节点,不跑大服务在宿主机上(所有业务放VM/LXC)
核心原则:宿主机内存 = 系统本身 + Corosync + PVE API + 日志/缓存 + 预留抖动空间,不要把内存全部分给虚拟机。
一、基础预留参考(推荐值)
| 宿主机总内存 | 宿主机预留内存 | 说明 |
|---|---|---|
| ≤16G | 4G | 小机器,至少留4G;不建议低于3G |
| 32G | 4~6G | 常规家用/测试节点,推荐4G |
| 64G | 6~8G | 生产单节点,推荐6G |
| 128G | 8~12G | 多VM、集群、Ceph/本地存储压力大,拉满到12G |
| 256G+ | 12~16G | 集群+大量虚拟机,Ceph场景建议16G |
⚠️ 集群模式(≥2节点):保底预留4G,Corosync、QEMU管理进程开销会略高。
⚠️ 如果宿主机还要跑:Ceph、ZFS、Samba/NFS、Docker,额外加内存
- ZFS:ARC缓存单独预留,一般给物理内存10%~50%,这部分是单独的,不能算进上面的系统预留!
- Ceph OSD:每个OSD建议2G内存,单独预留。
二、最低安全底线(不推荐长期跑)
- 纯PVE,无Ceph/ZFS,只做KVM虚拟化:最低3GB
- 低于3G风险:
- 宿主机OOM,kernel杀死pvedaemon、corosync,集群脑裂
- 内存压力大时,宿主机swap疯狂读写,节点卡死、虚拟机失联
- PVE web界面超时,无法管理虚拟机
三、PVE内存分配逻辑(重点)
PVE默认使用内存ballooning(气球驱动):
- 你给VM设置的内存是最大可用内存,不是开机立刻占满;
- 但是当虚拟机业务吃满分配内存时,会直接挤压宿主机内存;
👉 计算可用给VM的总内存 = 物理总内存 − 宿主机预留 − ZFS ARC/Ceph等组件内存
示例:
服务器 64G内存,用ZFS,ARC设置8G
宿主机预留6G
可分配给所有VM总和:64 − 6 − 8 = 50G
四、实操检查命令(宿主机内执行)
# 当前内存占用
free -h
# 查看zfs arc占用(用zfs才需要看)
cat /proc/spl/kstat/zfs/arcstats | grep size
# 查看pve相关进程占用
top
# 或者 htop
五、实操设置建议
- 不要把
ballooning全部关掉,但是不要超配内存(内存overcommit,生产强烈不建议) - 宿主机开启swap,小容量即可:4G swap,作为应急缓冲,不能当主内存
- 监控:在PVE面板看节点内存使用率,宿主机长期高于80%就要减VM内存
作者:月影鹏鹏 创建时间:2026-10-04 08:19
最后编辑:月影鹏鹏 更新时间:2026-10-04 08:19
最后编辑:月影鹏鹏 更新时间:2026-10-04 08:19