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 不会完整反映这部分分配。因此,topkubectl 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。

相关阅读

Memo通过 SSH 迁移 btrfs volumesMemo允许 perf 采集内核回溯Memo系统编程资料

讨论

邮箱用于身份识别和回复通知,并由 Waline 存储。