worker_processes 应设为 auto 或物理核心数,配合 worker_cpu_affinity auto、worker_rlimit_nofile 和 events 块参数调优,重载后通过 ps 和 /proc 检查进程数与 cpu 绑定。

直接在 nginx.conf 的全局配置块(main context)里设置 worker_processes 指令即可,这是控制工作进程数量的唯一方式。
推荐设为 auto
生产环境最稳妥的做法是:
worker_processes auto;- Nginx 启动时会自动读取
/proc/cpuinfo中的cpu cores值,设为物理核心总数 - 避免手动填错(比如把超线程逻辑核当物理核)、也规避跨核调度抖动
手动设置要匹配物理核心数
如果明确知道服务器 CPU 物理核心数,可写具体数字:
- 查物理核心数:
lscpu | grep "CPU\(s\):" -A 1 | tail -1 | awk '{print $4}'或grep 'cpu cores' /proc/cpuinfo | head -1 | awk '{print $4}' - 例如 4 核 CPU,就写
worker_processes 4; - 不建议设成超线程数(如 8 线程的 4 核 CPU 不该设 8),也不建议远高于核心数(如 1 核机器设 4,会导致频繁上下文切换)
配合关键参数才真正生效
只改 worker_processes 不够,还需同步调优:
-
worker_cpu_affinity auto;:让每个 Worker 绑定到独立物理核,减少缓存失效 -
worker_rlimit_nofile 655350;:提升单进程能打开的文件描述符上限,否则 worker_connections 会受系统限制卡住 -
events { worker_connections 40960; multi_accept on; use epoll; }:确保每个 Worker 能撑住足够连接,并高效收包
验证是否按预期启动
改完配置后重载并检查进程数:
nginx -t && nginx -s reload-
ps aux | grep 'nginx: worker'—— 输出行数应等于你设的值 -
cat /proc/$(pgrep nginx | head -1)/status | grep -i "cpus_allowed_list"可确认 CPU 绑定情况











