首页/系统/Linux 运维命令速查/numastat/numactl NUMA 视角
性能与监控48 条

numastat/numactl NUMA 视角

多路服务器内存分节点:进程跨节点访问内存会显著变慢;numactl 绑定、numastat 观察命中分布。

Linux 运维命令速查系统更新于 2026-10-13

NUMA 是什么

多路服务器把内存划分成多个节点,每个 CPU 有自己的本地内存。进程访问本地节点很快,跨节点访问的延迟明显更高、可用带宽也更低。numactl 用来查看拓扑并绑定 CPU 与内存节点,numastat 用来观察各节点的命中与缺失计数,两者配合才能判断内存访问是否在「跨节点」。

基本信息

所属numactl 软件包
常用命令numactl --hardware、numactl --cpunodebind、numastat
观察项numa_hit、numa_miss、numa_foreign
典型用户数据库、缓存等大内存应用

典型使用场景

  • 数据库或缓存服务上线前确认是否存在跨节点访问
  • 排查「CPU 不满但吞吐上不去」的隐性瓶颈
  • 容器环境中评估可见的 NUMA 拓扑
  • 绑定 CPU 与内存节点,减少跨节点访问
  • 对比绑定前后延迟与吞吐的变化
  • 多实例部署时规划节点分布,避免互相挤占

常用示例

常用示例
numactl --hardware                   # 查看节点、CPU 与内存分布
numastat                             # 各节点命中与缺失计数
numastat -p $(pgrep -f mysql | head -1)   # 指定进程的节点分布
numactl --cpunodebind=0 --membind=0 java -jar app.jar   # 绑核并绑内存
numactl --interleave=all ./cache-server   # 交错分配,分摊带宽
lscpu | grep -i numa                  # 快速确认 NUMA 节点数
cat /sys/devices/system/node/node*/meminfo | head   # 直接看各节点内存

numastat 字段读法

字段含义异常表现
numa_hit在本地节点成功分配基线值,占比越高越好
numa_miss本地分配失败改选其它节点持续增长说明本地内存不足
numa_foreign本节点内存被其它节点使用说明存在跨节点访问
interleave_hit交错分配命中次数按交错策略分配时关注
local_node在本地节点分配的次数与 numa_hit 结合判断
容器里的 NUMA 拓扑由宿主机抽象:绑定前先确认容器内可见的节点数与宿主是否一致,否则绑定结果与预期不符。
把进程死绑在单个节点上,会让内存与带宽集中到一侧:节点内存用满后反而制造新瓶颈,绑定前先核对节点容量。
也可以在系统层开启自动 NUMA 平衡,让内核按访问模式迁移内存页;手工绑定与自动平衡应当二选一,或谨慎组合。

易错点

  • 不查拓扑就绑核绑内存:绑到内存较小的节点,压力集中后性能更差
  • 容器内照搬宿主机节点编号:抽象层不同,绑定可能无效或落到其它节点
  • 只看 CPU 利用率不看节点缺失:跨节点访问的瓶颈藏在 numastat 的数据里
  • 与自动 NUMA 平衡同时生效却不自知:两种机制互相干扰,性能波动难解释

数据来源与参考

  • man 8 numactl
  • man 8 numastat
  • 内核文档 admin-guide/numa

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌