JS SDK v2.0.16报错13 INTERNAL: received RST_STREAM with code 0是什么含义?
错误含义说明
你遇到的Error: 13 INTERNAL: received RST_STREAM with code 0是gRPC框架抛出的标准内部错误:
- 错误码
13 INTERNAL是gRPC预定义的内部错误分类,代表服务调用链路出现了非业务逻辑的底层异常 RST_STREAM是HTTP/2协议的帧类型,作用是异常终止一个HTTP/2数据流,附带的code 0对应HTTP/2的NO_ERROR状态,代表连接是被正常回收关闭,而非协议层面的错误
本质是调用gRPC接口时,正在复用的HTTP/2长连接被链路中的某一端提前终止,导致当前请求未完成就被中断。
常见触发场景
- JS SDK v2.0.16版本已知bug:该版本的gRPC JS SDK存在HTTP/2连接复用逻辑缺陷,当并发请求量较高、或者网络波动触发连接重连时,会偶发未处理完的请求被挂载到已被标记关闭的连接上,最终抛出该错误,该问题在后续v2.1.x及更高版本有对应修复
- 中间链路闲置连接回收:客户端和服务端之间的负载均衡器、反向代理(如Nginx、云厂商LB)、WAF设备通常会设置HTTP/2长连接的闲置超时时间,当连接超过阈值没有流量传输时,会主动断开连接,如果此时刚好有请求复用该连接,就会触发该错误
- 服务端主动断开连接:服务端进程重启、优雅下线、或者设置的最大连接数/单连接最大请求数阈值被触达时,会主动断开旧的长连接,也会导致正在处理的请求抛出该错误
- 网络层异常:客户端和服务端之间的网络波动、防火墙拦截、TCP连接被重置等底层网络问题,也会触发该类报错
快速排查方案
- 优先将gRPC JS SDK升级到最新稳定版,排查是否是版本已知bug导致
- 调整SDK连接参数,将
grpc.keepalive_time_ms设置为小于中间代理的闲置超时时间(通常建议设置为30000,即30秒),主动发送心跳保活避免连接被中间设备回收 - 排查服务端、中间代理设备的日志,确认是否存在主动断开连接的操作记录
内容的提问来源于stack exchange,提问作者Waylon Jepsen
相关产品推荐
相关产品推荐

