直接设worker_processes auto;并配合worker_cpu_affinity auto;、worker_rlimit_nofile 65535、use epoll;及accept_mutex off;,才能真正实现多核负载均衡;需以nproc或lscpu算出的物理核数为准,容器中须严格按limits.cpu值手动设置。

直接设 worker_processes auto;,再配合 CPU 绑定、文件描述符扩容和事件模型启用,就能让多核真正分担负载,而不是只压爆一个核。
确认该用几个 worker 进程
不能凭感觉或看 /proc/cpuinfo 猜——它在容器、云主机里常返回宿主机核数,不准。运行:
-
nproc:输出多少,就对应多少逻辑核,auto就按这个值启进程 -
lscpu | grep -E "Core\(s\) per socket|Socket\(s\)":算出物理核总数(比如 2×8=16),I/O 或 CPU 密集型业务可优先按此数起步 - 容器/K8s 中必须以 Pod 的
limits.cpu为准,例如配了"4",就别让auto读错宿主机的 64 核
必须绑定 CPU 核心避免调度挤占
光改进程数没用。不绑定时,Linux 调度器可能把所有 worker 都塞进同一颗核,造成缓存失效、上下文切换抖动。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- Nginx ≥ 1.9.10 直接加:
worker_cpu_affinity auto;,自动跳过超线程对称核,优先绑物理核 - 手动配置示例(4 核):
worker_cpu_affinity 0001 0010 0100 1000;(位掩码从右往左对应 core 0–3) - 验证是否生效:
ps -eo pid,psr,comm | grep nginx,看每个 worker 的psr列是否落在不同 CPU 编号上
同步放开系统与 Nginx 的资源上限
即使进程数和绑定都对了,若文件描述符卡死,worker 一上来就排队等句柄,照样单核打满。
- Nginx 主配置块加:
worker_rlimit_nofile 65535; - 系统级限制:
/etc/security/limits.conf中为 nginx 用户加:
nginx soft nofile 65536
nginx hard nofile 65536 - 启动前执行
ulimit -n确认生效;再检查events { use epoll; worker_connections 4096; }是否匹配
关掉 accept 锁,允许多 worker 并发抢连接
旧版本默认开启 accept_mutex on,会导致多个 worker 排队争 listen socket,形成“伪单点”。
- 显式关闭:
accept_mutex off;(Nginx ≥ 1.11.3 默认已关,低版本务必补上) - 搭配启用:
multi_accept on;,让每个 worker 一次尽可能多地收就绪连接 - 确保事件模型是
use epoll;(Linux 必须显式写,别依赖默认)










