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