在前面梳理NUMA相关内容时,才发现numactl这个工具,除了可以管理numa之外,还有一个意想不到的用途,那就是绑核。严格来说,绑核这个特性,相较于本地部署,在云平台中则更为常见。毕竟,对于一些重要程度比较高的应用,将其与一个或者多个cpu核心绑定,从而不受云平台资源弹性伸缩的影响,其收益还是很明显的。[root@loaclhost ~]# numastat node0numa_hit 560480numa_miss 0numa_foreign 0interleave_hit 53866local_node 560480other_node 0
- numa_hit:打算在该节点上分配内存,最后从这个节点分配的次数。
- numa_miss:打算在该节点分配内存,最后却从其他节点分配的次数。
- numa_foreign:打算在其他节点分配内存,最后却从这个节点分配的次数。
- interleave_hit:采用interleave策略最后从本节点分配。
- local_node:该节点上的进程在该节点上分配的次数。
- other_node:其他节点进程在该节点上分配的次数。
由于我这里只有一个CPU,因此输出结果只有一列。如果是4个:上述几个指标当中,如果发现numa_miss比较高,就说明某个进程和其他numa节点更亲和。这样,就可以把指定的进程绑定到指定的CPU上,从而提高内存命中率。使用numactl将指定程序绑定到指定的core上:[root@loaclhost ~]# numactl -C 0-4 /home/dmdba/dmdbms/bin/DmServiceDMSERVERlibnuma: Warning: cpu argument 4 out of range<0-4> is invalid[root@loaclhost ~]# numactl -C 0 /home/dmdba/dmdbms/bin/DmServiceDMSERVER restartStopping DmServiceDMSERVER: [ OK ]Starting DmServiceDMSERVER: 上一次登录: 二 3月 28 09:24:33 CST 2026 pts/0 上 [ OK ]
也可以使用taskset,将其绑定到一个core上执行:[root@loaclhost ~]# taskset -c 0 /home/dmdba/dmdbms/bin/DmServiceDMSERVER restart
- https://cloud.tencent.com/developer/article/1850622