本文主要是介绍pprof火焰图排查问题小计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题描述
前情提要:一个go服务使用了公司内部的流式框架,将业务拆分成算子,算子间通过Input和output进行参数传递
线上一个go模块会有偶现的非预期错误,通过日志发现是出现了算子入参的丢失,首先怀疑是不是自己的框架打开方式错了,排查后发现不是;再排查是不是框架问题,这怎么可能,要是内部框架有这种问题,厂内早爆炸了;
后通过补充日志,观察到是中间某个算子执行超时了,导致出现了上述问题
你问我,为啥代码会超时? 我只想说,不可能 绝对不可能
但是问题终归要解决,于是开始排查程序的性能问题
解决过程
- go tool pprof http://localhost:8020/debug/pprof/profile?seconds=1500
- 上述命令结束后会产出一个文件
- go tool pprof -http=IP:PORT 你自己的文件路径
- 浏览器会打开一个火焰图,看下哪些是业务的代码;火焰图就是看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题。颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调。
- 如果有平顶,那就尝试优化吧朋友
官网:更全的信息参考这里:::https://pkg.go.dev/net/http/pprof
排查结论
存量代码在算子中的耗时主要集中在数据解析时取巧的使用了json序列化和反序列化,简单字符串的拼接使用了fmt.sprintf
优化后长尾耗时数量明显下降明显
这篇关于pprof火焰图排查问题小计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!