Nginx `keepalive`与连接保活探测报文(TCP Keepalive Probes)内核调优

雨丽大大_6395

雨丽大大_6395

2026-09-17

467人浏览

原创

nginx的keepalive配置与linux内核tcp keepalive机制本质不同:前者是http层连接复用控制(如keepalive_timeout、upstream keepalive),由nginx主动管理生命周期以减少握手开销;后者是内核对空闲tcp连接的被动健康探测(tcp_keepalive_time/intvl/probes),仅兜底防僵死,不参与复用逻辑,二者需协同调优才能支撑百万级稳定并发。

nginx `keepalive`与连接保活探测报文(tcp keepalive probes)内核调优

很多人混淆 Nginx 的 keepalive 配置和 Linux 内核的 TCP Keepalive 探测机制,其实它们作用对象、触发时机和调优目标完全不同。前者是 HTTP 层连接复用控制,后者是内核网络栈对空闲 TCP 连接的健康探测。搞清区别再调,才能避免“越调越卡”。

HTTP keepalive(Nginx 主动管理)

这是 Nginx 为客户端提供的长连接能力,核心是复用单个 TCP 连接收发多个 HTTP 请求,省去重复握手开销。它不依赖内核 TCP Keepalive,完全由 Nginx 自己控制生命周期:

  • keepalive_timeout:连接空闲多久后关闭,默认 75s。建议设为 60s,兼顾复用率与资源释放速度;API 类服务可缩至 15–30s
  • keepalive_requests:单连接最多处理多少请求,默认 100。必须设高(如 10000),否则连接在未超时前就因请求数满被强制断开,导致“假短连接”
  • upstream keepalive:反向代理场景下,Nginx 与后端之间的连接池也要配,例如:
    upstream backend {<br>  server 10.0.1.10:8080;<br>  keepalive 200;<br>}

    其中 200 是每个 worker 保留在连接池中的空闲连接数,不是总连接上限

TCP Keepalive Probes(内核被动探测)

这是 Linux 内核对已建立但长期无数据传输的 TCP 连接,自动发送探测包确认对方是否存活。它不影响 HTTP 复用逻辑,只在连接“静默太久”时起兜底作用,防止僵死连接堆积:

Nginx Config Linter
Nginx Config Linter

对 Nginx 配置文件进行语法检查、验证和安全、性能审计。

下载
  • tcp_keepalive_time:连接空闲多久后开始发第一个探测包,默认 7200 秒(2 小时)。高并发场景建议调低至 1800(30 分钟)或 1200(20 分钟)
  • tcp_keepalive_intvl:两次探测之间间隔,默认 75 秒。建议设为 30 秒,加快失败识别
  • tcp_keepalive_probes:连续失败几次后判定连接死亡,默认 9 次。建议设为 5,避免等待过久才释放资源
  • 这些参数只影响内核行为,Nginx 不感知也不干预;即使你关掉它们,Nginx 的 HTTP keepalive 仍照常工作

为什么两者要协同调?

单独调某一层容易出问题:

  • HTTP keepalive_timeout 设太长(如 300s),但内核 tcp_keepalive_time 还是默认 2 小时 → 连接实际没死,却长期占着 worker_connections,挤占新连接资源
  • 反向代理中,Nginx 到后端的连接若未配 upstream keepalive,每次请求都新建 TCP 连接 → 即使内核 Keepalive 开了也救不了握手风暴
  • 客户端是移动设备或 NAT 网关后,中间设备可能主动 kill 掉空闲连接(如 5 分钟),此时 Nginx 的 keepalive_timeout 若设为 60s,但没配 client_header_timeout/send_timeout,仍可能在读写阶段卡住

配套必须做的几件事

光调 keepalive 相关参数远远不够,下面这些是真正让百万连接稳住的基础:

  • 内核 somaxconn 和 Nginx listen backlog 必须对齐(都设为 65535 或更高),否则新连接进不来
  • 确保 ulimit -n ≥ 65535,并在 nginx.conf 中用 worker_rlimit_nofile 同步生效
  • 禁用 tcp_tw_recycle(已废弃且在 NAT 环境下引发乱序),仅启用 tcp_tw_reuse = 1
  • 对于 SSE、WebSocket 等流式长连接,必须关闭 proxy_buffering 和 gzip,否则数据被攒着不发

相关文章

keep
keep

Keep是一款健身安排,无论是想减肥塑形或增肌,还是寻找健身跑步瑜伽计步等训练计划,你可以随时随地选择课程进行训练!权威教练视频教学,健身干货自由分享!有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

417

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

840

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2432

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

816

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

709

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

374

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2176

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4012

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

647

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

nginx手册
nginx手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习