如何通过Nginx worker_cpu_affinity与numactl协同优化,实现跨核内存访问延迟的最小化策略?
- 内容介绍
- 文章标签
- 相关推荐
本文共计811个文字,预计阅读时间需要4分钟。
该命令将worker进程绑定到特定CPU核心,以优化性能。在双路服务器上,使用以下命令将前4个worker绑定到Node 0的物理核心:
常见错误现象:
- 压测 QPS 上不去,
perf record -e mem-loads,mem-stores显示大量远程内存访问事件 -
cat /proc/<pid>/status | grep Mems_allowed返回00000003(即两个节点都允许),说明未限制内存域 - 即使
worker_cpu_affinity配置正确,taskset -cp <pid>查看绑定生效,性能仍无改善
必须用 numactl 启动 Nginx 主进程才能控制内存亲和
Nginx 自身不支持 numa_bind 或 numa_interleave 等内存策略,所有子进程(包括 worker)继承主进程的 NUMA 策略。所以关键动作是:用 numactl --cpunodebind=0 --membind=0 启动 master 进程,让其 fork 出来的所有 worker 都只使用 Node 0 的 CPU 和内存。
本文共计811个文字,预计阅读时间需要4分钟。
该命令将worker进程绑定到特定CPU核心,以优化性能。在双路服务器上,使用以下命令将前4个worker绑定到Node 0的物理核心:
常见错误现象:
- 压测 QPS 上不去,
perf record -e mem-loads,mem-stores显示大量远程内存访问事件 -
cat /proc/<pid>/status | grep Mems_allowed返回00000003(即两个节点都允许),说明未限制内存域 - 即使
worker_cpu_affinity配置正确,taskset -cp <pid>查看绑定生效,性能仍无改善
必须用 numactl 启动 Nginx 主进程才能控制内存亲和
Nginx 自身不支持 numa_bind 或 numa_interleave 等内存策略,所有子进程(包括 worker)继承主进程的 NUMA 策略。所以关键动作是:用 numactl --cpunodebind=0 --membind=0 启动 master 进程,让其 fork 出来的所有 worker 都只使用 Node 0 的 CPU 和内存。

