首页/系统/Linux 内核与性能调优速查/numastat 跨节点访问统计
内存与 OOM58 条

numastat 跨节点访问统计

按节点统计 numa_hit/miss/foreign 等命中情况;foreign 与 miss 持续偏高说明跨节点访问多,是 NUMA 调优的信号。

numastat 是什么

numastat 按 NUMA 节点统计内存分配的命中情况:numa_hit 表示在本节点分配成功,numa_miss 与 numa_foreign 表示实际落到了别的节点上(对分配者而言是 miss,对提供者而言是 foreign)。这两项持续偏高,说明进程的内存分布与它运行的 CPU 不在同一节点,会造成跨节点访存、抬高延迟,是 NUMA 调优最直接的量化信号。

基本信息

系统级视图numastat(各节点各项计数)
内存视图numastat -m(各节点内存总量、已用与空闲)
进程级视图numastat -p <pid>
拓扑参考numactl --hardware
数据性质多数为累计计数,判断趋势需多次采样
前提仅在多 NUMA 节点机器上才有意义

典型使用场景

  • 判断服务是否存在跨节点访存:numa_miss 与 numa_foreign 持续偏高
  • 核对绑定策略是否一致:CPU 绑到节点 0 而内存落在节点 1 属于典型错配
  • 评估大内存应用(数据库、缓存、JVM)的 NUMA 亲和性收益
  • 与延迟指标联动,验证 NUMA 调优前后的实际变化
  • 容器与虚机环境确认节点可见性与内存分布是否可控

查看与验证

查看与验证
numastat  # 系统级:各节点的 numa_hit/miss/foreign 等累计计数
numastat -m  # 各节点内存总量、已用与空闲,判断节点是否失衡
numastat -p 12345 | head  # 指定进程的内存节点分布
numactl --hardware | head  # 确认节点数量、内存大小与节点间距
# 调整绑定后复测,比较 foreign 与 miss 的变化
numactl --cpunodebind=0 --membind=0 ./service  # CPU 与内存同时绑到节点 0

计数读法

计数含义判读要点
numa_hit在本节点成功分配的次数越高越好,反映本地命中
numa_miss本节点分配失败而落到别处对分配者是跨节点访问
numa_foreign别的节点分配失败而落到本节点本节点在为别人供内存,分布失衡
interleave_hit交错分配策略的命中次数仅在启用 interleave 策略时有意义
local_node / other_node本地与其他节点的分配统计用于对比整体的本地化程度
这些统计是累计值,单次读数只反映历史分布。判断当前是否存在跨节点访问压力,需要多次采样对比增量,并与业务延迟指标一起看。
只绑 CPU 不绑内存是常见疏漏:CPU 固定到某节点后,内存仍可能按默认策略落在别的节点,跨节点访存依然存在,必须用 numactl 的 membind 或 mempolicy 同步约束。

易错点

  • 用累计计数判断当前状态:必须多次采样对比增量,否则结论会随时间漂移
  • 只关注 miss 忽略 foreign:两者含义不同,foreign 偏高说明本节点在为其他节点供内存
  • 只绑 CPU 不绑内存:绑定看似生效,跨节点访存依旧存在,收益落空
  • 在容器内直接下结论:NUMA 视图通常不完整,调优多在宿主或特权容器层进行
  • 在单节点机器上套用这些指标:没有跨节点概念时统计没有实际意义

数据来源与参考

  • numactl 文档 numastat(8)
  • Linux 内核 Documentation/admin-guide/mm/numa_memory_policy.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌