先说结论:worker_processes 决定 CPU 并行处理能力,但总并发上限取决于 worker_processes * worker_connections。在负载均衡场景下,需同时调整两者并配合 upstream keepalive 才能有效提升并发。
- 先定位:查看 CPU 核心数及当前 Nginx 配置
- 先做:设置 worker_processes auto,同步调大 worker_connections
- 再验证:通过压测工具对比 QPS 变化及 CPU 利用率
核心原理
Nginx 采用多进程模型,每个 worker 进程独立处理请求。如果进程数少于 CPU 核心数,可能导致部分核心空闲;如果进程数远多于核心数,操作系统需要在进程间频繁切换上下文,反而消耗 CPU 资源。通常建议一对一匹配,过多进程会导致上下文切换开销增加。
在负载均衡场景中,Nginx 作为反向代理,worker 进程数直接影响与后端服务器建立连接的能力。进程数不足会成为并发瓶颈,但仅改进程数不改连接数无法实质提升并发能力。
配置优化步骤
1. 备份配置文件
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak2. 修改配置,推荐使用 auto 并调整连接数
worker_processes auto;
events {
worker_connections 4096; # 根据内存情况调整,默认通常较小
}3. 检查配置语法
nginx -t4. 平滑重载
nginx -s reload负载均衡场景关联配置
若 Nginx 作为负载均衡器,需确保 upstream 配置了 keepalive,否则每个请求都可能新建后端连接,导致端口耗尽。
upstream backend {
server 192.168.1.10:8080;
keepalive 32; # 每个 worker 进程保持的空闲连接数
}
server {
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}性能压测验证
使用 wrk 工具进行压力测试,对比优化前后的 QPS 数据。
1. 确保已安装 wrk 工具
# CentOS (需 EPEL 源)
yum install -y wrk
# macOS
brew install wrk2. 执行压测命令
wrk -t12 -c400 -d30s http://your-domain.com/3. 观察指标
重点关注 Latency 分布及 Req/Sec 值。若 CPU 未跑满且 QPS 不再增长,可能受限于 worker_connections 或后端处理能力。
常见坑与排查
1. 文件描述符限制:进程数增加后,需确保系统 ulimit 足够,否则可能报错 Too many open files。
ulimit -n 655352. 端口耗尽:作为代理时,若未配置 upstream keepalive,高并发下可能耗尽本地 ephemeral ports。
3. 特殊场景微调:如果是 SSL 密集型,可能需要根据具体测试结果进行微调,建议根据实际压测结果进行微调。