Nginx高并发优化需系统内核、进程调度、自身参数和压测验证四层协同:调优limits与sysctl参数;配置worker_processes/auto、cpu_affinity、multi_accept等;精细设置keepalive、tcp_nodelay、sendfile等;最后用wrk压测并监控stub_status、jemalloc及perf热点。

想让Nginx在高并发下稳如磐石、响应飞快,光调几个配置远远不够。真正有效的优化必须贯穿系统内核、进程调度、Nginx自身参数和压测验证四个层面,缺一不可。
系统内核与资源限制调优
内核是Nginx性能的底层地基,很多瓶颈其实卡在这里:
- 修改 /etc/security/limits.conf,为 nginx 用户设置软硬限制:
nginx soft nofile 1000000nginx hard nofile 1000000 - 调整关键内核参数(写入 /etc/sysctl.conf):
net.core.somaxconn = 65535(提升连接请求队列深度)net.ipv4.tcp_tw_reuse = 1(允许复用 TIME_WAIT 套接字)net.ipv4.tcp_fastopen = 3(启用 TCP Fast Open,加速握手)vm.swappiness = 10(降低交换倾向,保障内存响应) - ARM平台(如银河麒麟+鲲鹏/飞腾)建议额外启用
net.ipv4.tcp_low_latency = 1,减少延迟敏感场景的排队开销
Nginx主进程与Worker调度优化
避免CPU争抢和上下文切换浪费,是多核服务器的关键:
-
worker_processes auto;—— 自动匹配物理核心数,比手动写死更稳妥 -
worker_cpu_affinity auto;—— 内核 4.0+ 支持,自动绑定各 worker 到独立核心,比位掩码更安全可靠 -
worker_rlimit_nofile 100000;—— 必须 ≥worker_connections,否则不生效 -
worker_priority -10;—— 提升调度优先级,尤其适用于混合部署环境 - 开启
multi_accept on;和accept_mutex off;,让所有 worker 同时抢新连接,提升吞吐(需搭配足够worker_connections)
连接与传输效率精细化配置
每个TCP连接、每个数据包的处理方式,都会累积成可观的延迟或带宽损耗:
-
keepalive_timeout 60s;+keepalive_requests 10000;—— 平衡长连接复用与资源释放,API服务可降至 30s/5000,静态站可设为 65s/10000 -
tcp_nodelay on;—— 禁用 Nagle 算法,确保小包(如 JSON 响应头)立即发出 -
tcp_nopush on;+sendfile on;—— 配合使用实现零拷贝+满包发送,对大文件或静态资源收益显著 -
client_header_buffer_size 4k;+large_client_header_buffers 8 8k;—— 防止因 header 过大触发临时文件读写,也增强抗碎片攻击能力
压测验证与持续监控闭环
没有压测的优化等于纸上谈兵。必须用真实流量模式验证效果,并建立反馈机制:
- 用
wrk -c 2000 -t 8 -d 30s http://your.site/分阶段加压,观察 error rate、latency P99 和 CPU 软中断(si%)变化 - 启用
stub_status模块,配合 Prometheus 抓取Active connections、Reading/Writing/Waiting等指标 - 关注
nginx -V 2>&1 | grep -o "built by.*"输出,确认是否启用jemalloc(比 glibc 减少 15%-20% 内存碎片) - 在 ARM 银河麒麟环境,务必用
perf record -g -p $(pgrep nginx)捕获热点函数,常见瓶颈在 SSL 握手或正则匹配,而非网络栈



















