1.简介
用pprof对程序进行分析然后优化程序。
pprof 是用于可视化和分析性能分析数据的工具
-
集成到代码中:在代码内导入
_ "net/http/pprof",并启动一个HTTP server。 -
收集分析数据:当程序运行时,访问
http://localhost:port/debug/pprof/来获取性能数据。 -
数据分析:使用
go tool pprof工具来分析性能数据。
使用步骤:
- 集成到代码:在代码中调用
trace.Start()和trace.Stop()来开始和结束追踪。 - 生成跟踪文件:当你调用
trace.Stop()时,程序会生成一个.trace文件。 - 数据分析:利用
go tool trace工具来查看跟踪数据。
2.前置准备
引入
import{
"log"
"net/http"
_ "net/http/pprof"
}
然后运行程序可以在 网页 http://localhost:6060/debug/pprof/ 看到程序占用的详细信息
3.程序优化
1.cpu
在cmd运行下面代码看查程序运行时所有占用的时间
go tool pprof "http://localhost:6060/debug/pprof/profile?seconds=10"
然后输入
web
可以打开一个详细信息网页
可以看到tiger中的Eat所占的最多找到eat所在的位置
修改代码
修改后最站时间的时长为350ms
2.内存
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/heap"
发现Pee func1占用了1.2GB的内存steal也占用了很多
找到代码所在位置
修改代码
修改后程序所占内存大量减少
3.goroutine
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/goroutine"
点击flame Graph
发现Wolf代码有异常 在 Source 视图下搜索 wolf
修改代码
4.mutex
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/mutex"
发现
占用大量时间
在 Source 视图下搜索
修改代码
占用时间变少
5.block
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/block"
找到代码所在位置
修改代码
然后发现wolf的howl也有一些问题,之后对该代码进行修改。
通过pprof,我们可以轻松找出程序中的性能瓶颈,并对代码进行优化。在实际的开发中,这种反复的分析-优化迭代方法是非常有效的。
性能优化是一个持续的旅程。为了编写出高效的Go代码,我们不仅要深入理解Go语言的特性,还要善于使用其丰富的性能分析工具。只有这样,你的Go应用才能真正发挥其最大潜能。