收起左侧

飞牛fnOS 开启KVM内存气球实现内存动态按需分配教程

5
回复
686
查看
[ 复制链接 ]

2

主题

0

回帖

0

牛值

江湖小虾

2026-4-26 10:15:39 显示全部楼层 阅读模式

什么是内存气球?

内存气球(Memory Ballooning)是KVM虚拟化的一项技术,能让虚拟机动态按需使用物理内存

  • 虚拟机空闲的时候,自动把不用的内存释放给宿主飞牛NAS
  • 虚拟机需要更多内存的时候,再动态申请
  • 物理内存不浪费,真正做到大家按需分配

适用场景

  • 飞牛fnOS NAS 上开Windows/Linux虚拟机
  • 虚拟机不是一直占满内存,大部分时间空闲
  • 希望把空闲内存腾出来给NAS用(跑Docker、共享、转码等)

配置步骤

1. 查看现有虚拟机列表

virsh list --all

输出示例:

 Id   Name       State
---------------------------
 -    wtbt71lx   shut off

找到你要配置的虚拟机名称,本文以 wtbt71lx 为例。

2. 检查是否已开启内存气球

virsh dumpxml 你的虚拟机名 | grep -i balloon

如果输出有:

<memballoon model='virtio'>
</memballoon>

说明已经开启,跳过这步。如果没有输出,需要编辑虚拟机配置添加:

virsh edit 你的虚拟机名

<devices> 段落内添加:

<memballoon model='virtio'/>

保存退出(vi按 Esc 然后 :wq)。

3. 设置动态内存范围

语法:

# 设置最大内存(单位:KB,8GB = 8388608 KB)
virsh setmaxmem 你的虚拟机名 最大内存KB --config
# 设置启动/最小内存(单位:KB,1GB = 1048576 KB)
virsh setmem 你的虚拟机名 最小内存KB --config

常用换算: | GB | KB | |----|-----| | 1G | 1048576 | | 2G | 2097152 | | 4G | 4194304 | | 8G | 8388608 | | 16G | 16777216 |

示例:给Windows设置最小1GB,最大8GB

virsh setmaxmem wtbt71lx 8388608 --config
virsh setmem wtbt71lx 1048576 --config

4. 虚拟机内安装驱动

Linux 虚拟机

大部分发行版内核已经自带 virtio_balloon 驱动,验证:

lsmod | grep virtio

看到 virtio_balloon 就可以了,不用额外装。

Windows 虚拟机

需要手动安装virtio驱动:

  1. 在飞牛宿主下载驱动ISO:
    cd /tmp
    wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
    
  2. 挂载ISO到虚拟机,编辑配置添加光盘:
    virsh edit wtbt71lx
    

<devices> 内添加:

<disk type='file' device='cdrom'>
  <driver name='qemu' type='raw'/>
  <source file='/tmp/virtio-win.iso'/>
  <target dev='hdc' bus='ide'/>
  <readonly/>
</disk>
  1. 启动虚拟机,手动安装驱动
    • 打开设备管理器,找到带**感叹号的"PCI内存气球设备"
    • 右键 → 更新驱动 → 浏览到光盘 X:\balloon\w10\amd64 (对应你的系统版本)
    • 下一步自动安装完成,重启生效

不要用完整的 virtio-win-guest-tools.exe 一键安装,容易报错,手动装inf更稳定。

5. 启动虚拟机,验证生效

virsh start 你的虚拟机名

在飞牛宿主查看当前分配情况:

virsh domstats 你的虚拟机名 --balloon

输出示例:

Domain: 'wtbt71lx'
  balloon.current=1349632      # 当前分配:约1.3GB
  balloon.maximum=8388608      # 最大:8GB
  balloon.rss=1470724          # 实际占用物理内存:约1.4GB

再看飞牛宿主可用内存:

free -h

能看到空闲内存比之前(固定分配8GB)多出好几个GB,说明配置生效了!

效果展示

配置前(固定8GB全占满):

Mem:            15Gi       10Gi       2.1Gi     ...

配置后(动态1-8GB,实际只用1.4GB):

Mem:            15Gi       3.4Gi       3.1Gi     ...
                          ^^^^^  只用了3.4G,省出6.5G给NAS用!

总结

参数 作用
setmaxmem 虚拟机最大能用到多少内存(上限)
setmem 虚拟机启动/默认分配多少内存(下限)
内存气球 自动在上下限之间动态调整,按需分配

设置完成后,你的飞牛NAS就能聪明地利用物理内存了,虚拟机和NAS都不耽误!


测试平台:飞牛fnOS 1.x,KVM虚拟化,Windows 10 虚拟机

收藏
送赞 3
分享

1

主题

15

回帖

0

牛值

江湖小虾

2026-5-13 10:30:56 显示全部楼层

请问楼主,这样配置以后在虚拟机中的内存显示的是99%占满了8G,虚拟机控制台APP上也显示了99%,但是飞牛监控面板其实只不到8G,这样就是正常的嘛

这个是正常的 气球内存就是通过占用虚拟机的内存 不然怎么可能会让你凭空宿主机多出可用内存 如果虚拟机内存紧张的时候 这个气球内存会导致虚拟机里面软件炸掉 不是非常推荐这个方案  详情 回复
2026-5-15 19:43

1

主题

15

回帖

0

牛值

江湖小虾

2026-5-13 12:13:31 显示全部楼层
  • 打开设备管理器,找到带**感叹号的"PCI内存气球设备" 然后这个也没找到
2026-5-15 19:43:59 显示全部楼层
吃八方 发表于 2026-5-13 10:30
请问楼主,这样配置以后在虚拟机中的内存显示的是99%占满了8G,虚拟机控制台APP上也显示了99%,但是飞牛监 ...

这个是正常的 气球内存就是通过占用虚拟机的内存 不然怎么可能会让你凭空宿主机多出可用内存 如果虚拟机内存紧张的时候 这个气球内存会导致虚拟机里面软件炸掉 不是非常推荐这个方案
哦哦好的谢谢  详情 回复
2026-5-18 09:50
https://www.xiaozhuhouses.asia/欢迎访问我的博客

1

主题

15

回帖

0

牛值

江湖小虾

2026-5-18 09:50:44 显示全部楼层
月光微暖冬亦凉 发表于 2026-5-15 19:43
这个是正常的 气球内存就是通过占用虚拟机的内存 不然怎么可能会让你凭空宿主机多出可用内存 如果虚拟机 ...

哦哦好的谢谢

13

主题

26

回帖

0

牛值

fnOS系统内测组

您好,我想请教一下,我跟着您的教程操作,操作完成之后发现宿主机的内存占用并没有下降,而且虚拟机内部的内存占用还直接变成占满了,请问这个是什么情况,应该如何解决

下面是我的相关操作和状态情况:

`bash
root@fnNAS:~# virsh setmaxmem gm2qv8zi 8388608 --config

root@fnNAS:~# virsh dumpxml gm2qv8zi | grep 8388608
  <memory unit='KiB'>8388608</memory>
root@fnNAS:~# virsh setmem gm2qv8zi 1048576 --config

root@fnNAS:~# virsh dumpxml gm2qv8zi | grep 1048576
  <currentMemory unit='KiB'>1048576</currentMemory>
root@fnNAS:~# virsh start gm2qv8zi
Domain 'gm2qv8zi' started

root@fnNAS:~# virsh domstats gm2qv8zi --balloon
Domain: 'gm2qv8zi'
  balloon.current=8388608
  balloon.maximum=8388608
  balloon.last-update=0
  balloon.rss=8446724

root@fnNAS:~# virsh domstats gm2qv8zi --balloon
Domain: 'gm2qv8zi'
  balloon.current=1157120
  balloon.maximum=8388608
  balloon.swap_in=1887872
  balloon.swap_out=310156
  balloon.major_fault=67795
  balloon.minor_fault=1601990
  balloon.unused=54068
  balloon.available=8383516
  balloon.usable=55174
  balloon.last-update=1780887649
  balloon.disk_caches=2212
  balloon.hugetlb_pgalloc=0
  balloon.hugetlb_pgfail=0
  balloon.rss=8458200

root@fnNAS:~# htop
root@fnNAS:~# free -h
               total        used        free      shared  buff/cache   available
Mem:            15Gi        11Gi       576Mi       143Mi       3.4Gi       3.5Gi
Swap:          4.0Gi       2.0Gi       2.0Gi

虚拟机内部的内存莫名其妙占满:

image.png

虚拟机内部的驱动安装正常:

image.png

驱动版本信息:

image.png

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则