爱吃芒果

Grpc Keepalive

TCP KeepAlive

TCP KeepAlive机制理解与实践小结中详细介绍了TCP KeepAlive的机制,这里重点提一下涉及到的参数:

  • tcp_keepalive_time 在TCP保活打开的情况下,最后一次数据交换到TCP发送第一个保活探测包的间隔,即允许的空闲时长,默认为2h
  • tcp_keepalive_probes 最大允许发送保活探测包的次数,达到此次数后直接放弃尝试,并关闭连接,默认为9次
  • tcp_keepalive_intvl 发送保活探测包的间隔,默认为75s

所以如果开启了TCP KeepAlive并保持默认参数,则空闲连接会在大约 2h 11min之后被断开

Grpc Client Connection

/posts/grpc-client-connection/image-20251012165622531.png

/posts/grpc-client-connection/image-20251012165854471.png

/posts/grpc-client-connection/image-20251012171239336.png

是的,有不少优秀的博客/技术文章探讨了在 gRPC / TCP 长连接中,应对“隐蔽断开”(silent drop)、“僵尸连接”(zombie connection)问题的方案。下面列几个经典与实用的,并且我还会摘关键要点供你快速对比。

直接内存实战

背景知识

在JDK 1.2之后,Java将引用分为强引用(Strongly Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phanom Reference),这4种引用强度依次逐渐减弱。

gRPC元数据

Metadata是关于某个特定RPC调用的信息,grpc元数据通过HTTP/2 header实现,它以键值对的形式存在,其中键是字符串,值通常是字符串,但也可以是二进制数据。键不区分大小写,由ASCII字母、数字和特殊字符-_.组成,但不能以grpc-开头(该前缀保留给gRPC使用),二进制数据对应的key以-bin结尾,而ASCII类型的键不带-bin后缀。