linux下优化worker_connections需同步对齐nginx配置、进程限制与内核参数:调整/proc/sys/fs/file-max、/etc/security/limits.conf中nofile及nginx.conf中worker_rlimit_nofile,并配套调优net.core.somaxconn、tcp_tw_reuse等内核参数,启用epoll和multi_accept。

Linux 下优化 worker_connections 不是改个数字就完事,关键在于让 Nginx 配置、进程限制、内核参数三者对齐。否则即使设成 65535,实际生效的可能还是 1024。
同步调整三类文件描述符限制
每个连接至少占用 1 个文件描述符(fd),真正起作用的是以下三个值中的最小值:
-
/proc/sys/fs/file-max:系统级总上限,建议设为
worker_processes × worker_connections × 1.3~1.5,预留 SSL 缓存、日志、TIME_WAIT 等开销 -
/etc/security/limits.conf 中 nginx 用户的限制,例如:
nginx soft nofile 65536nginx hard nofile 65536
改完需重启 systemd 服务或重新登录会话才生效 -
nginx.conf 主块中
worker_rlimit_nofile:必须 ≥worker_connections,推荐设为相同值或 1.2 倍,比如worker_rlimit_nofile 65536
配套调优内核网络参数
仅调 fd 不够,连接排队和回收也影响并发能力:
-
net.core.somaxconn:监听队列长度,建议设为 32768~65536 -
net.ipv4.tcp_tw_reuse = 1:允许 TIME_WAIT socket 重用,缓解端口耗尽 -
net.ipv4.tcp_max_syn_backlog:SYN 半连接队列大小,建议与 somaxconn 一致 - 确保
events块启用use epoll;和multi_accept on;,提升 I/O 效率
合理设置 worker\_processes 和 worker\_connections
理论最大并发数 = worker_processes × worker_connections,但要兼顾 CPU 和内存:
-
worker_processes推荐设为 CPU 核心数(auto或显式写数字),避免过多进程争抢 CPU -
worker_connections不宜盲目堆高:每连接约占 2–4 KB 内存,16 GB 内存服务器设 8192~16384 更稳妥 - 示例配置(4 核、64 GB 内存):
worker_processes 4;events {use epoll;worker_connections 16384;multi_accept on;}
验证是否真正生效
改完别急着上线,先检查实际限制是否到位:
- 运行
ulimit -n查看 nginx 进程当前 fd 上限(可用ps aux | grep nginx找主进程 PID,再cat /proc/PID/limits | grep "Max open files") - 访问
http://127.0.0.1/nginx_status(需开启 stub_status)观察活跃连接数趋势 - 压测时监控
netstat -s | grep -i "listen overflows",若出现溢出说明 somaxconn 或 accept 队列不够











