GO微服务(go-micro v2)响应超时但服务器负载不高问题出在哪?

我们的用户请求是经过一个kong网关,然后转发上游服务,就是我的go服务,是用go-micro v2写的grpc服务,qps大概3000多时,超时频繁,504.但是服务器负载不高,内存,IO都没问题,kong网关错误日志如下:

2022/12/04 20:08:28 [error] 13383#0: *111383271 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 42.218.168.26, server: kong, request: "GET /go.xx.xxx/api/find-msg-list/xxxx/1051 HTTP/1.1", upstream: "grpc://192.168.255.165:8896", host: "xx.xxxx.cn", referrer: "https://xxx.xxx.cn/live/xxxx?module=Investment_JDTJ"

google了一翻,说是可以使用 grpc.MaxConcurrentStreams()方法设置最大并发流数量,并且默认是100,如果真是瓶颈在这的话这个值显然很低,有提升空间。

问题1: 超时到底 是什么原因引起,是否真的是 MaxConcurrentStreams 这个参数默认值过小的问题。
问题2:就算是MaxConcurrentStreams这个设置问题,由于go-micro深度包装了 grpc的原始包,我暂时没找到如何设置 MaxConcurrentStreams 这个参数,看哪位大神可以指教一下。
多谢。

阅读 2.2k
1 个回答

要不在kong网关和后端服务器上开两个tcpdump抓个包看看

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题