生产环境中遇到的偶发问题如何定位

来源:1-4 Go 程序是怎么跑起来的

Jceee2号机

2021-05-25 16:28:25

现象:服务正常接口的执行时间是5ms内,偶尔出现一些执行超3秒的请求(重试是5ms内)。

下游timeout是3秒,直接504了,也看不出实际用了几秒。

出现概率:0.008% 超时:5100/64800000

  1. mysql连接池配置:
    sqlDB.SetMaxIdleConns(100)

    sqlDB.SetMaxOpenConns(100)

    sqlDB.SetConnMaxLifetime(time.Hour) 
  1. cpu/内存/负载 正常

  2. 数据库慢无查询,负载正常

问题一般如何定位?用什么工具定位

  1. mysql连接池问题?

  2. goroutine的调度有关? qps250左右,应该还不到go的单机瓶径

  3. 网络波动?

写回答

1回答

助教_小R

2021-07-22

一般偶发的问题不好排查,能稳定复现的才好查。



你这个 3s 应该是从客户端来看的吧?建议把服务端接口的耗时也打点监控起来。看看是否服务端就已经花费了 3s,很多时候,服务端很快就处理完了,但中间可能因为网络的问题,客户端很久长收到响应。



另外,把请求用 req_id 联系起来。客户端说耗时很长,那么 req_id 是什么,看下这个请求的参数是否有问题。有时候,服务端会根据请求参数来 make 一个很大的 slice,如果客户端传了一个特别大的参数,那就 gg 了。


其他的方案,可以参考一下曹大 holmes 的思路,例如在服务端的入口处检测到处理时间长,就把 cpu mem profile 搞下来,分析下。不过不一定能看出问题,试试。


0

Go高级工程师实战营

慕课网与 GoCN 社区官方联手打造,定义行业Go高级人才培养标准,4个月,快速晋升为P6+/D7级高级人才。

458 学习 · 266 问题

查看课程