调下游接口偶发 feign.RetryableException: Read timed out executing GET,可下游日志显示这次请求前后跑了 62 秒才结束,连接其实是通的,问题卡在等响应这一段。日志里能对上时间点,这种反而好排。

connectTimeout 只管建立连接,等响应由 readTimeout 单独控制,默认值 60 秒;只改前者,等待时间一点没变,慢接口照样把线程占满整整一分钟,连接池也会被拖住。这一点先确认清楚,后面就不用反复试。

feign.client.config.default.connectTimeout=1000
feign.client.config.default.readTimeout=3000

「Feign 读超时」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。

处理上按这个顺序:先确认配置写在 feign.client.config.default 这一层,不是写在某个服务名下;readTimeout 按下游 P99 给,再留出两成余量,别拍脑袋随便写个数;连接超时单独设一个小值,两个参数不要写成同一个数。

结果对不对很好判断,同一个慢接口在 3 秒处主动断开并抛超时异常,不再干等满一分钟。

作者 9823189