调优 worker_connections 需同步对齐系统文件描述符、nginx 进程级限制(worker_rlimit_nofile)及内核网络队列,并按业务类型合理设值,同时配套调整 events 参数如 use epoll、multi_accept 等。

调优 worker_connections 不是改个数字就完事,它必须和系统资源、Nginx 自身限制、内核网络队列三者对齐,否则设再高也白搭,还会报 “Too many open files” 或静默丢连接。
先打通系统文件描述符这道关
每个 TCP 连接至少占 1 个文件描述符(fd),Nginx worker 进程还要额外用 fd 处理日志、上游连接、SSL 缓存等。Linux 默认单进程最多打开 1024 个 fd,远不够用。
- 永久生效:编辑
/etc/security/limits.conf,为 Nginx 运行用户(如www-data或nginx)添加两行:nginx soft nofile 65536nginx hard nofile 65536 - 若用 systemd 管理,还需在
/etc/systemd/system/nginx.service.d/override.conf中加:[Service]LimitNOFILE=65536 - 验证是否生效:
cat /proc/$(pgrep nginx)/limits | grep "Max open files",确认输出值 ≥ 你设定的worker_connections
补上 Nginx 进程级句柄上限声明
系统开了口子,Nginx 得自己“伸手要”。仅靠 ulimit 不够,它必须显式申请足够 fd,否则会静默降级,不报错但性能卡死。
- 在
nginx.conf的 main 块(events块外、http块前)添加:worker_rlimit_nofile 65536; - 该值应 ≥
worker_connections,建议设为相同值或略高(如 1.2 倍),为日志、临时文件等留余量 - 注意:它不是 per-worker,而是整个 Nginx 主进程能向系统申请的 fd 总上限
匹配业务类型设合理数值
不是越大越好。过高会吃内存、增上下文切换开销;过低则扛不住并发。关键看连接行为:
- 高频短连接(如 H5 秒杀页、REST API):连接建得快、断得快,复用率低 → 推荐
worker_connections 8192–16384,并配合keepalive_timeout 0彻底禁用长连 - 长连接保活型(如 WebSocket、HTTP/2 上报、直播流):单连接持续时间长 → 推荐
2048–8192,同时设keepalive_timeout 15–30控制空闲时长 - HTTPS 反向代理:除 socket 外还需 SSL session cache、OCSP stapling 等额外 fd →
worker_connections建议不超过 ulimit 的 70%~80%
配套 events 参数必须同步调整
只改 worker_connections 就像给高速路拓宽了车道却不修入口匝道——车根本上不来。
-
use epoll;:Linux 必须显式写,避免回退到有 1024 硬限的select/poll -
multi_accept on;:让一个 worker 在一次事件循环中尽可能多 accept 新连接,缓解突发流量排队 -
accept_mutex on;:默认开启,防止多个 worker 同时争抢新连接导致“惊群” - 若用
reuseport(需 kernel ≥ 3.9),可考虑accept_mutex off;减少锁争抢
不复杂但容易忽略











