应设为worker_processes auto;——Nginx 1.3.8+自动读取逻辑CPU核数(如nproc输出8则启8进程),避免手动误差;须配合worker_cpu_affinity绑定核心、调高ulimit-n及epoll事件模型才能真正跑满多核。

把 worker_processes 设对,是让 Nginx 真正跑满多核 CPU 的第一步。它不是填个大数字就完事,而是要让每个工作进程“稳坐”一个逻辑 CPU 核心,少切换、少争抢、缓存更热。
按逻辑核心数设为 auto 最稳妥
直接写 worker_processes auto; —— Nginx 1.3.8+ 会自动读取系统逻辑 CPU 数(含超线程),比如 nproc 输出是 8,就启动 8 个 worker。这比手动查 /proc/cpuinfo 更准,尤其在容器或云主机里不会误读宿主机核数。
不推荐设成固定大数(如 16 跑在 4 核机器上),实测 QPS 反而下降 5%~15%,因为进程调度开销压过了并行收益。
必须搭配 worker_cpu_affinity 绑定核心
只设对数量还不够。不绑定的话,Linux 调度器可能把多个 worker 随机挤在同一个核上,导致 L1/L2 缓存频繁失效、指令执行不连续。
- 双核:worker_cpu_affinity 01 10;
- 四核及以上:推荐用 worker_cpu_affinity auto;(Nginx 1.9.10+ 支持),自动错开超线程对,优先分配物理核
- 绑定后,每个 worker 固定运行在专属核心,SSL 解密、共享内存锁、文件元数据等热点数据更易驻留本地缓存
同步放开系统级连接上限
worker_processes × worker_connections 才是理论并发上限,但真正卡住你的往往是“too many open files”报错。
- events 块中设 worker_connections 10240;(默认 1024 太低)
- nginx.conf 主配置加 worker_rlimit_nofile 65535;
- 系统级永久生效:在
/etc/security/limits.conf中为 nginx 用户添加nginx soft nofile 65536nginx hard nofile 65536 - 验证:启动前运行
ulimit -n,确认值已生效
配合事件模型与超时策略释放资源
worker 进程高效运转,依赖快速回收空闲连接和避免被拖住:
- events 块中明确写 use epoll;(Linux 必选,比 select/poll 高效得多)
- keepalive_timeout 30; keepalive_requests 1000; 提升长连接复用率,减少握手压力
- client_header_timeout 10; proxy_read_timeout 60; 防止慢客户端或后端响应延迟拖住整个 worker



















