如何排查线上程序问题

题目来源:字节跳动

答案:

线上问题排查思路(如忽然访问变慢)

  1. 链路追踪(zipkin skywalking等),确认问题在哪条链路上(是否是因为调用别人的接口引起的,解决方案熔断降级)
  2. 查看相应容器的prometheus,观察cpu、内存、网卡、磁盘等等
  3. cpu、内存问题,打开性能调试pprof具体调试cup或内存

内存泄漏问题,通常是goroutine泄漏所引起的。

查看goroutine数量,如果goroutine数量过多,可能是因为goroutine没有及时退出导致内存泄漏。top、list定位到具体代码,查看此goroutine退出机制是否有问题

极少情况是代码问题导致的内存泄漏,需要调试内存性能,top命令查看消耗内存的函数 list命令直接定位相关消耗内存的代码

cpu飙升,通常是因为io问题导致的,极少情况是代码问题,如死循环

查看性能监控如prometheus,如果cpu wait耗时,则确定是io问题

排查思路与上面一样,top、list排查

pprof还可以打开可视化界面查看,用户更友好