对于一般探针(如 Prometheus Node Exporter、哪吒监控、ServerStatus、Zabbix 等)来说,它们检测到的总内存确实会随时缩小和放大。
探针获取内存数据的底层逻辑,绝大多数是定期读取 Linux 系统的 /proc/meminfo 文件中的 MemTotal 字段。在 KVM 的气球机制(Virtio Balloon)下,当宿主机回收内存时,它相当于在硬件层面动态“拔掉”了你的内存条;归还内存时,又相当于动态“插上”了内存条。因此,Guest OS(你的 Debian 13)会认为物理内存上限确实改变了。
这会带来一个非常棘手的监控副作用:基于百分比的内存告警会频繁失效或误报。例如,你设置了“内存使用率 > 80% 则告警”。当系统总内存从 14GB 突然被宿主机缩减到 7.3GB 时,即使你的实际业务进程只占用了 6GB,使用率也会瞬间从 42% 飙升到 82%,从而触发虚假告警。
实时监测气球内存的实操方法
要实时捕获这种变化,你可以在 SSH 终端中使用以下几种方法:
1. 持续观测 Total 内存的动态变化(最直观)
使用 watch 命令让系统每秒刷新一次 free 的结果。你可以直观地看着第一列的 total 数值像股票一样跳动。
watch -n 1 free -h
2. 追踪内核层面的 Balloon 驱动活动日志
当气球驱动执行大规模的充气(回收内存)或放气(分配内存)时,内核通常会记录相关动作。使用 -w 参数可以实时滚动查看内核日志。
# 实时滚动监控内核关于气球驱动的日志
dmesg -w | grep -i balloon
# 或者使用 journalctl
journalctl -k -f | grep -i balloon
3. 实时监控底层 MemTotal 字段
如果你想看看探针到底读取到了什么原始数据,可以持续刷新 /proc/meminfo。
watch -n 1 'cat /proc/meminfo | head -n 3'
4. 结合 htop / btop 进行图形化观测
运行 htop 或 btop 时,关注界面顶部的内存条。在气球内存环境中,你会看到那个代表“总量”的进度条上限(例如 [||||| 1.4G/14.0G] 中的 14.0G)时不时发生改变,而不仅仅是已使用量在变。
我的主力16C16G 居然没有气球内存🤔
三、CPU测评
CPU: AMD EPYC 9534 64-Core Processor 步进1 (25代) 32/64-bit × 16颗
╚═ 16核心, 16线程, 2449.974MHz, 利用率1%
缓存: L1d 1 MiB, L1i 1 MiB, L2 8 MiB, L3 256 MiB
指令集: ✔ VT-x/AMD-V ✔ AES-NI ✔ AVX2 ✔ BMI1/2 ✔ EPT/NPT
Sysbench:单线程 4450.57 多线程 69627.93
详细结果:https://browser.geekbench.com/v5/cpu/24361777
四、显卡测评
显卡: [集显]AMD Cirrus Logic GD 5446
五、内存测评
内存: 总容量 15.6 GB, 已用 8.7 GB(56%), 可用 6.9 GB(44%)
交换: 总容量 7.4 GB, 已用 0.5 GB(6%), 可用 7.0 GB(94%)
超开指标: ✘ 气球回收 ✘ KSM 复用
Sysbench:读取 56227.5 MB/s 写入 32060.9 MB/s 延迟 137 nsGeekbench 5 Score
1430
Single-Core Score
15340
Multi-Core Score