正确写法是worker_processes auto;,Nginx启动时调用sysconf(_SC_NPROCESSORS_ONLN)获取系统在线逻辑CPU数作为进程数,不识别cgroup限制或超线程状态。
直接在 Nginx 主配置文件(通常是
)的最外层(即
main 块
)中写入:
正确写法:用 auto 作值,不是新指令
worker_processes 的合法语法只有
或
。不存在
这个配置项——这是常见误写。
✅ 正确:
❌ 错误:
或
它怎么自动获取核心数?
Nginx 启动时调用系统接口
,读取当前操作系统报告的
在线逻辑 CPU 数
(即
命令输出的值),并以此作为 worker 进程数量。
Nginx
在宝塔面板中轻松管理Nginx高性能Web服务器。提供可视化配置反向代理、负载均衡、SSL证书及HTTP缓存功能,一键优化高并发性能,助您高效搭建稳定、快速的网站运行环境。
下载
它不看 cgroup 限制(容器里设了 2 核,宿主机有 32 核,仍会启 32 个)
它不区分超线程是否启用,只认系统“可见”的逻辑核
在 OpenVZ 等旧虚拟化环境可能返回 1,上线前建议验证
容器或云环境需配合调整
auto 虽方便,但在资源受限场景下容易失准:
Docker/K8s 中设置了
→ 应显式写
若必须用 auto,建议搭配
(Nginx ≥1.12.0),减少跨核调度开销
混合部署(如 Nginx + Java 共存)可预留核心:
(需启动脚本支持)
配置后如何确认生效?
不要只信配置文件,要验证运行态:
查错误日志:
,启动时会打印
看进程数:
(结果应等于 worker_processes 值)
查加载配置:
/etc/nginx/nginx.confworker_processes number;worker_processes auto;worker_processes_autoworker_processes auto;worker_processes_auto on;worker_processes = auto;sysconf(_SC_NPROCESSORS_ONLN)nprocresources.limits.cpu: "2"worker_processes 2;worker_cpu_affinity auto;worker_processes $(nproc --all | awk '{print $1-2}');tail -f /var/log/nginx/error.logusing X processesps -C nginx --no-headers | wc -lnginx -T 2>/dev/null | grep 'worker_processes'