worker_connections不能单独调高,必须与系统资源、内核参数、Nginx进程限制形成闭环;否则触发“Too many open files”或静默丢连接,需同步调整limits.conf、worker_rlimit_nofile、sysctl参数及events配置,并结合限流、缓存与连接复用综合优化。

应对双十一级别突发流量,worker_connections 不能单独调高,它只是并发能力的“刻度标尺”,真正起效必须和系统资源、内核参数、Nginx 进程限制形成完整闭环。否则只会报 Too many open files 或静默丢连接。
确认真实瓶颈再扩容
很多“扛不住”的现象并非连接数不够,而是卡在其他环节:
- 用
ss -s查当前 ESTABLISHED 连接总数,对比worker_processes × worker_connections理论上限 - 检查 Nginx 错误日志:
grep "accept.*failed.*Too many open files" /var/log/nginx/error.log - 运行
ulimit -n,确认当前 nginx 用户的文件描述符限制是否低于你设的worker_connections - 查系统总句柄池:
cat /proc/sys/fs/file-max,电商大促建议 ≥ 200 万
四层联动调参,缺一不可
只改 worker_connections 是无效的,必须同步调整以下四项:
-
用户级限制:编辑
/etc/security/limits.conf,添加* soft nofile 1048576* hard nofile 1048576
并确保/etc/pam.d/common-session含session required pam_limits.so -
Nginx 进程级限制:在
nginx.conf主上下文(http 外)加worker_rlimit_nofile 1048576;
该值应 ≥worker_connections,推荐设为相同值 -
内核网络队列:修改
/etc/sysctl.confnet.core.somaxconn = 65535net.core.netdev_max_backlog = 25000net.ipv4.tcp_tw_reuse = 1
执行sysctl -p生效 -
events 块优化:在
nginx.conf的events块中配置use epoll;multi_accept on;accept_mutex off;(高并发下关闭可减少锁竞争)
合理设定 worker_connections 数值
不是越大越好,需结合硬件与业务特征:
- 8 核服务器配
worker_processes auto;(即 8),单 worker 推荐worker_connections 16384~32768,总理论并发约 13 万~26 万 - 若启用长连接(如
keepalive_timeout 300;),每个连接持续占槽位,此时更应按真实并发连接峰值而非 QPS 设定 - 内存约束:每个连接约占 2–4 KB,8GB 内存服务器不建议单 worker 超过 65535
- 起步可设为
8192,压测后逐步调至32768,避免一步到位引发稳定性风险
搭配限流与连接复用,提升实际吞吐
单纯堆高连接数治标不治本,必须组合防御性策略:
- 用
limit_req控制请求速率,例如秒杀接口:limit_req zone=seckill burst=50 nodelay; - 静态资源设置强缓存:
location ~* \.(jpg|png|css|js)$ { expires 30d; add_header Cache-Control "public, immutable"; } - 缩短空闲连接生命周期:
keepalive_timeout 15;keepalive_requests 100; - 启用
open_file_cache减少磁盘 IO,尤其适合商品详情页高频读取场景










