这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
性能调优是程序开发中非常重要的步骤之一,它可以对程序进行性能问题的定位。性能调优需要遵循下面的原则:
- 依靠数据而不是猜测
- 要定位最大的瓶颈而不是细枝末节
- 不要过早优化
- 不要过度优化
性能分析工具
性能调优的核心是性能瓶颈的分析,对于 Go 应用程序,最方便的就是 pprof 工具
安装
pprof 如果需要使用web可视化界面功能,还需要额外安装graphviz。
Windows版下载地址:graphviz.gitlab.io/_pages/Down…
安装完成后将bin文件夹添加至环境变量
pprof 功能
- pprof 是用于可视化和分析新能分析数据的工具
- 可以知道在什么地方耗费了多少的cpu、memory等运行指标
pprof实践
首先clone项目,准备在本地机器上进行性能调优。
实际过程
命令行分析
命令行分析 go tool pprof "http://localhost:6060/debug/pprof/profile?seconds=10"
执行此命令后,会在~/pprof文件夹中生成一个pprof.samples.cpu.xxx.pb.gz。
这个文件便是cpu的性能参数文件。如果需要在命令行中查看,可以cd到这个目录,输入指令 go tool pprof pprof.samples.cpu.001.pb.gz
进入后可以看到一些基本的信息,比如采样类型,时间,间隔。
这时我们在命令行中输入top,可以看到占用cpu时间的排行榜。
可以看到,tiger.Live方法调用了tiger.Eat,占用了比较多的cpu时间。这时我们就可以前往对应的代码文件,定位并解决问题。
WebUI分析
使用webui可以帮助我们更直观的看到问题所在
命令: go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/profile?seconds=10"
可以看到命令主要是加了-http=:8080这个参数,就可以启动一个web服务在8080端口,方便我们对cpu问题进行分析。其实结果和之前命令行中的区别不大。
除此之外还可以对别的性能问题进行分析,区别只是web服务的路径不一样。
- 排查阻塞问题:
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/block" - 排查堆内存问题:
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/heap" - 排查协程问题:
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/goroutine" - 排查锁问题:
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/mutex"