我们的用户请求是经过一个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 这个参数,看哪位大神可以指教一下。
多谢。
要不在kong网关和后端服务器上开两个tcpdump抓个包看看