Memo/node-exporter-memory-zfs-arc-amd-gtt
1 分钟阅读
修正 ZFS 主机的 Node Exporter 内存告警
按可回收 ZFS ARC 修正可用内存,并单独展示 AMD GTT。
Node Exporter 只导出 /proc/meminfo,不计算内存使用率。Grafana 和 Prometheus 通常使用:
100 * (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)
Linux 计算 MemAvailable 时不会把 ZFS ARC 计入可回收页缓存。AMD GTT 使用系统内存,但进程 RSS 和 Pod working set 不会完整反映这部分分配。因此,top 和 kubectl top 不能直接核对上述结果。
现场数据:ZFS ARC 43.2 GiB,AMD GTT 27.9 GiB,kubectl top node 42.3 GiB;原公式得到 94.2%。
检查相关数据:
free -h grep -E '^(size|c_min) ' /proc/spl/kstat/zfs/arcstats grep -H . /sys/class/drm/card*/device/mem_info_gtt_used grep -H . /proc/pressure/memory
告警将高于 c_min 的 ARC 计为可回收内存。没有 ZFS 指标时,or ... * 0 回退到原公式:
(
node_memory_MemAvailable_bytes
+ (
clamp_min(node_zfs_arc_size - node_zfs_arc_c_min, 0)
or node_memory_MemTotal_bytes * 0
)
) / node_memory_MemTotal_bytes < 0.10
面板分别展示 effective used、ZFS ARC、Linux page cache、GPU GTT 和 swap used。amd_gpu_used_gtt 的单位是 MiB,与 Node Exporter 的字节指标合并时需乘 1024 * 1024。
该口径用于减少 ARC 引起的误报。实际内存压力仍需检查 swap-out 和 memory PSI。
讨论
邮箱用于身份识别和回复通知,并由 Waline 存储。