PProf " 是 Go 语言中用于性能分析的一组工具和包。它能够帮助开发者收集和分析运行中 Go 程序的性能数据,从而深入了解应用程序的运行行为,识别性能瓶颈,并对代码进行优化。
包提供一个HTTP端点来对代码性能进行分析。可以用来监测进程的运行数据,用于监控程序的性能,对内存使用和CPU使用的情况统信息进行分析。
位于net/http/pprof下的包可以提供web服务器的性能分析
位于runtime/pprof下的包提供普通代码的性能分析
模式
- 报告生成模式
- Web界面模式
- 终端交互模式
展示方式
TopGraphFlameGraphPeekSourceDisassemble
浏览器指标查看
在浏览器直接输入localhost:6060/debug/pprof 可以对各个指标进行查看,可以对问题处进行点击链接查看
终端对CPU进行分析
go tool pprof 命令行分析工具
在终端输入 go tool pprof "http://localhost:6060/debug/pprof/profile?seconds=10" 可以设定不同采研时间,等待采样结束后会显示相关信息并进入以下界面 输入不同的命令可以实现不同功能的查询
输入
top可以显示按消耗CPU排列的统计结果
对于表格参数记录如下
- flat 当前函数执行耗时
- flast% 占用CPU时间
- sum% 上面falt%总和
- cum 当前函数本身加上其调用函数总耗时
- cum% cum占CPU总时间
- 当Flat ==Cum时 函数中没有调用其他函数内容
- Flat=0 则函数内只有调用其他函数
输入 list 加函数名
list cat可以查看函数存在占用的代码行号
WEB端分析
http://localhost:6060/debug/pprof/(或指定的端口)上提供:
/debug/pprof/heap:堆剖析,显示内存分配情况。/debug/pprof/goroutine:Goroutine 剖析,显示所有当前 Goroutine 的堆栈跟踪。/debug/pprof/cpu:CPU 剖析,显示程序的 CPU 使用情况。/debug/pprof/block:阻塞剖析,显示 Goroutine 阻塞情况。/debug/pprof/threadcreate:线程创建剖析,显示线程创建情况。
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/heap"
每个端口的显示功能类似,可以实现
一系列性能分析。
此外可以通过search 来查找响应的函数目标。