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风险:
    1. 宿主机OOM,kernel杀死pvedaemon、corosync,集群脑裂
    2. 内存压力大时,宿主机swap疯狂读写,节点卡死、虚拟机失联
    3. 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

五、实操设置建议

  1. 不要把ballooning全部关掉,但是不要超配内存(内存overcommit,生产强烈不建议)
  2. 宿主机开启swap,小容量即可:4G swap,作为应急缓冲,不能当主内存
  3. 监控:在PVE面板看节点内存使用率,宿主机长期高于80%就要减VM内存
作者:月影鹏鹏  创建时间:2026-10-04 08:19
最后编辑:月影鹏鹏  更新时间:2026-10-04 08:19