生产环境中遇到的偶发问题如何定位
现象:服务正常接口的执行时间是5ms内,偶尔出现一些执行超3秒的请求(重试是5ms内)。
下游timeout是3秒,直接504了,也看不出实际用了几秒。
出现概率:0.008% 超时:5100/64800000
- mysql连接池配置:
sqlDB.SetMaxIdleConns(100)
sqlDB.SetMaxOpenConns(100)
sqlDB.SetConnMaxLifetime(time.Hour)
-
cpu/内存/负载 正常
-
数据库慢无查询,负载正常
问题一般如何定位?用什么工具定位
-
mysql连接池问题?
-
goroutine的调度有关? qps250左右,应该还不到go的单机瓶径
-
网络波动?
14
收起
正在回答 回答被采纳积分+1
1回答
助教_小R
2021-07-22 18:19:26
一般偶发的问题不好排查,能稳定复现的才好查。
你这个 3s 应该是从客户端来看的吧?建议把服务端接口的耗时也打点监控起来。看看是否服务端就已经花费了 3s,很多时候,服务端很快就处理完了,但中间可能因为网络的问题,客户端很久长收到响应。
另外,把请求用 req_id 联系起来。客户端说耗时很长,那么 req_id 是什么,看下这个请求的参数是否有问题。有时候,服务端会根据请求参数来 make 一个很大的 slice,如果客户端传了一个特别大的参数,那就 gg 了。
其他的方案,可以参考一下曹大 holmes 的思路,例如在服务端的入口处检测到处理时间长,就把 cpu mem profile 搞下来,分析下。不过不一定能看出问题,试试。
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星