pprof性能调优 | 青训营笔记

64 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天

性能调优是程序开发中非常重要的步骤之一,它可以对程序进行性能问题的定位。性能调优需要遵循下面的原则:

  • 依靠数据而不是猜测
  • 要定位最大的瓶颈而不是细枝末节
  • 不要过早优化
  • 不要过度优化

性能分析工具

性能调优的核心是性能瓶颈的分析,对于 Go 应用程序,最方便的就是 pprof 工具

安装

pprof 如果需要使用web可视化界面功能,还需要额外安装graphviz。

Windows版下载地址:graphviz.gitlab.io/_pages/Down…

安装完成后将bin文件夹添加至环境变量

pprof 功能

  • pprof 是用于可视化和分析新能分析数据的工具
  • 可以知道在什么地方耗费了多少的cpu、memory等运行指标

pprof实践

示例项目:github.com/wolfogre/go…

首先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时间的排行榜。

image.png

可以看到,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"