首页/数据/Redis 进阶速查/tcp-keepalive 与死连接清理
性能与排障129 条

tcp-keepalive 与死连接清理

tcp-keepalive(默认 300 秒)让内核定期探测连接存活,及时发现半开连接;跨公网与负载均衡场景价值更高。

Redis 进阶速查数据更新于 2026-10-13

tcp-keepalive 的作用

tcp-keepalive 让内核定期向空闲连接的对端发送探测包,判断连接是否还活着,默认 300 秒。它解决的是「对端已经消失但本端不知道」的半开连接问题:客户端进程崩溃、网络设备静默丢表、链路中断时,没有探测的连接会一直占着服务端的连接槽与内存。跨公网或经过四层负载均衡的部署里,这个参数的价值更高。

基本信息

默认值300(秒)
主要作用内核定期探测空闲连接,识别半开连接
相关参数客户端心跳间隔、中间设备空闲超时
典型场景跨公网连接、四层负载均衡之后的部署
配套关系与客户端心跳一起使用,单侧探测覆盖不全

典型使用场景

  • 半开连接清理:客户端异常退出后连接未被回收,探测能及时释放
  • 经过网络设备:中间设备静默丢表时本端无从感知,靠探测兜底
  • 连接数异常上涨:回收僵尸连接,避免连接槽被无效占用
  • 负载均衡之后:客户端与 LB 超时错配时,服务端探测是最后一道防线
  • 长连接运维:连接稳定但数量居高不下时,先确认探测是否生效

查看与调整

查看与调整
redis-cli CONFIG GET tcp-keepalive            # 当前探测间隔
redis-cli CONFIG SET tcp-keepalive 60         # 按需调整,与客户端心跳配套
redis-cli INFO clients | grep connected_clients   # 连接数是否随探测回落
redis-cli CLIENT LIST | head -10              # 看连接空闲时长与来源地址分布
sysctl net.ipv4.tcp_keepalive_time            # 内核层默认值,别只看 Redis 配置

相关参数对照

参数位置作用
tcp-keepaliveRedis 配置服务端向空闲对端发起探测的间隔
tcp_keepalive_timeLinux 内核内核层面开始探测的空闲时长
中间设备空闲超时负载均衡器或防火墙设备侧主动回收空闲连接
客户端心跳连接池配置客户端侧确认连接仍可用
探测生效需要时间:间隔设置较长时,半开连接会在服务端挂住较久,占用连接槽与内存,故障发现也会滞后。
把 tcp-keepalive 调得极短会让空闲连接频繁发探测包,连接数多时形成额外流量;间隔应与客户端心跳配合,而不是一味求短。

易错点

  • 使用较长的默认探测间隔:半开连接长时间占用连接槽,故障与泄漏发现滞后
  • 中间设备静默断连而服务端仍显示在线:只能靠客户端心跳或探测兜底,单侧配置覆盖不全
  • 把探测间隔设得过短:连接数多时探测包本身成为额外负载
  • 只看 Redis 配置不看内核默认值:两层参数叠加后实际生效时间与预期不符

数据来源与参考

  • Redis 官方文档:tcp-keepalive 说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌