wechatpay-go icon indicating copy to clipboard operation
wechatpay-go copied to clipboard

常态化低概率一直发生的接口HTTP POST时EOF问题,有一点疑问

Open realpg opened this issue 2 years ago • 3 comments

服务器较大负载调用转账到零钱接口给客户发促销小额现金奖励 每分钟几十次的频率 长期稳定运行后, 调用这个接口一直有千分之一到百分之二之间的概率,直接HTTP POST时报EOF 网络高峰和网络平峰时都有

{"error": "Post \"https://api.mch.weixin.qq.com/v3/transfer/batches\": EOF"}

非golang开发的平台调用此类接口就没见过这种错误,同期同网络基本都是100%的接口可用性

通过检索, 大部分这类故障都提到是Http keep-alive的问题, 通过显示配置http client关闭keep-alive即可

在stackoverflow上 大家同时说这个问题是早期golang版本的问题, 到golang1.8就修复了

问下大佬们对这类问题是否有头绪?是否在现在golang 1.18的情况下还需要显示关闭keep-alive?

realpg avatar Dec 22 '22 10:12 realpg

没有遇到类似问题,请问是 httpClient.Do 返回的 err ?

能贴下调用的上下文代码吗?

xy-peng avatar Dec 28 '22 08:12 xy-peng

近期俺也遇到了类似的问题,翻阅到了 https://github.com/golang/go/issues/22158 ,记得此issue,特来此备注下解题思路:

判断当前client使用的http(s)Agent,是否重用了socket(请翻golang文档应该有方法及描述),并且判断当前angent 抛的异常是不是 ECONNRESET,在此场景下,丢弃之前的socket并新建链接重试一下;

另外:API服务端响应其实是要显式返回keep-alive: timeout= 头,告知客户端,此alive socket 链接多久会被服务端咔嚓...

TheNorthMemory avatar May 20 '23 03:05 TheNorthMemory

服务器较大负载调用转账到零钱接口给客户发促销小额现金奖励 每分钟几十次的频率 长期稳定运行后, 调用这个接口一直有千分之一到百分之二之间的概率,直接HTTP POST时报EOF 网络高峰和网络平峰时都有

{"error": "Post \"https://api.mch.weixin.qq.com/v3/transfer/batches\": EOF"}

非golang开发的平台调用此类接口就没见过这种错误,同期同网络基本都是100%的接口可用性

通过检索, 大部分这类故障都提到是Http keep-alive的问题, 通过显示配置http client关闭keep-alive即可

在stackoverflow上 大家同时说这个问题是早期golang版本的问题, 到golang1.8就修复了

问下大佬们对这类问题是否有头绪?是否在现在golang 1.18的情况下还需要显示关闭keep-alive? 我也遇到了这个问题,你解决了吗

maxomnis avatar Jul 29 '24 03:07 maxomnis