如何排查线上程序问题
题目来源:字节跳动
答案:
线上问题排查思路(如忽然访问变慢)
- 链路追踪(zipkin skywalking等),确认问题在哪条链路上(是否是因为调用别人的接口引起的,解决方案熔断降级)
- 查看相应容器的prometheus,观察cpu、内存、网卡、磁盘等等
- cpu、内存问题,打开性能调试pprof具体调试cup或内存
内存泄漏问题,通常是goroutine泄漏所引起的。
查看goroutine数量,如果goroutine数量过多,可能是因为goroutine没有及时退出导致内存泄漏。top、list定位到具体代码,查看此goroutine退出机制是否有问题
极少情况是代码问题导致的内存泄漏,需要调试内存性能,top命令查看消耗内存的函数 list命令直接定位相关消耗内存的代码
cpu飙升,通常是因为io问题导致的,极少情况是代码问题,如死循环
查看性能监控如prometheus,如果cpu wait耗时,则确定是io问题
排查思路与上面一样,top、list排查
pprof还可以打开可视化界面查看,用户更友好