nginx高并发性能优化需围绕“快建连、多并发、少等待、稳传输”四大目标,精准调优内核参数:调大somaxconn和tcp_max_syn_backlog至65535以扩容连接队列,启用tcp_tw_reuse和扩大ip_local_port_range缓解time_wait端口耗尽,增大tcp缓冲区并启用bbr拥塞控制提升吞吐与稳定性。

Web 服务器对网络连接的建立速度、并发承载能力、连接复用效率和资源回收节奏极为敏感。默认内核参数是为通用场景设计的,面对 Nginx/Apache/Tomcat 等高并发短连接或长连接混合负载时,往往成为性能瓶颈。调优不是堆参数,而是围绕“快建连、多并发、少等待、稳传输”四个目标,匹配业务特征做精准调整。
扩大连接队列,避免请求被丢弃
当突发流量到来,如果队列太小,SYN 包或已完成三次握手的连接会直接被内核丢弃,表现为客户端超时或 502/503 错误。
-
net.core.somaxconn:全连接队列(accept queue)上限,默认通常为 128。建议设为 65535,并确保 Web 服务 listen() 的 backlog 值(如 Nginx 的
listen 80 backlog=65535)不小于该值; - net.ipv4.tcp_max_syn_backlog:半连接队列(SYN queue)长度,默认常为 128 或 256。同样建议设为 65535,抵御 SYN 洪泛并提升建连吞吐;
- net.core.netdev_max_backlog:网卡软中断收包队列,默认一般为 1000。高吞吐场景下建议提高到 8192 或 16384,防止网卡接收侧堆积丢包。
优化 TIME_WAIT 连接处理,缓解端口耗尽
HTTP/HTTPS 短连接频繁关闭后进入 TIME_WAIT 状态(默认持续 60 秒),会占用本地端口和内存。在反向代理、API 调用等客户端角色场景中,易出现“Cannot assign requested address”错误。
- net.ipv4.tcp_tw_reuse = 1:允许将处于 TIME_WAIT 的套接字用于新的 outbound 连接(仅适用于客户端主动发起连接的场景),需配合 net.ipv4.tcp_timestamps = 1(默认开启);
- net.ipv4.tcp_fin_timeout = 30:缩短 FIN-WAIT-2 状态超时时间(默认 60),加快进入 TIME_WAIT 流程,间接加速整体回收;
- net.ipv4.ip_local_port_range = "1024 65535":扩大可用临时端口范围,从默认约 28K 提升至超 64K,显著增加并发出站连接能力;
- net.ipv4.tcp_max_tw_buckets:限制系统中 TIME_WAIT 套接字总数(如设为 262144),防止单机内存被过度占用。
调大 TCP 缓冲区,适配现代网络带宽
千兆及以上带宽、高延迟链路(如跨机房)下,过小的 TCP 缓冲区会导致窗口缩限、吞吐受限甚至重传增多。
- net.core.rmem_max / wmem_max:分别设为 16777216(16MB),作为单连接读写缓冲上限;
- net.ipv4.tcp_rmem / tcp_wmem:三元组建议设为 "4096 65536 16777216",让内核根据带宽时延积(BDP)自动扩缩,兼顾小包响应与大流吞吐;
- net.ipv4.tcp_slow_start_after_idle = 0:禁用空闲后重置拥塞窗口,对长连接型 Web 服务(如 WebSocket、HTTP/2 流)更友好,避免反复慢启动。
启用现代拥塞控制与队列管理
传统 cubic 在高带宽低延迟环境易激进发包,造成缓冲膨胀(bufferbloat);而 BBR 可更稳定地探测并利用可用带宽。
- net.ipv4.tcp_congestion_control = bbr:启用 BBR 拥塞控制算法(需内核 ≥ 4.9);
- net.core.default_qdisc = fq:搭配 BBR 使用,采用公平队列(Fair Queueing)调度,降低尾部延迟,提升多流并发体验;
- net.ipv4.tcp_no_metrics_save = 1:禁止缓存 TCP 连接指标(如 RTT、MSS),避免旧连接参数影响新连接性能,适合连接高度动态的 Web 场景。











