Go程序性能优化分析实践 | 青训营

77 阅读2分钟

1.简介

用pprof对程序进行分析然后优化程序。

pprof 是用于可视化和分析性能分析数据的工具

  • 集成到代码中:在代码内导入_ "net/http/pprof",并启动一个HTTP server。

  • 收集分析数据:当程序运行时,访问http://localhost:port/debug/pprof/来获取性能数据。

  • 数据分析:使用go tool pprof工具来分析性能数据。

使用步骤:

  1. 集成到代码:在代码中调用trace.Start()trace.Stop()来开始和结束追踪。
  2. 生成跟踪文件:当你调用trace.Stop()时,程序会生成一个.trace文件。
  3. 数据分析:利用go tool trace工具来查看跟踪数据。

2.前置准备

引入

import{
"log"  
"net/http"  
_ "net/http/pprof"

}

然后运行程序可以在 网页 http://localhost:6060/debug/pprof/ 看到程序占用的详细信息

image.png

3.程序优化

1.cpu

在cmd运行下面代码看查程序运行时所有占用的时间

go tool pprof "http://localhost:6060/debug/pprof/profile?seconds=10"

image.png 然后输入 web 可以打开一个详细信息网页

image.png 可以看到tiger中的Eat所占的最多找到eat所在的位置

image.png 修改代码

image.png

修改后最站时间的时长为350ms image.png

2.内存

go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/heap"

发现Pee func1占用了1.2GB的内存steal也占用了很多

image.png 找到代码所在位置

image.png

修改代码

image.png 修改后程序所占内存大量减少

image.png

3.goroutine

go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/goroutine"

点击flame Graph

image.png

发现Wolf代码有异常 在 Source 视图下搜索 wolf

image.png 修改代码

image.png

image.png

4.mutex

go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/mutex"

image.png 发现 占用大量时间 在 Source 视图下搜索

image.png 修改代码

image.png

占用时间变少 image.png

5.block

 go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/block"

image.png

找到代码所在位置

image.png

修改代码

image.png

image.png

然后发现wolf的howl也有一些问题,之后对该代码进行修改。

通过pprof,我们可以轻松找出程序中的性能瓶颈,并对代码进行优化。在实际的开发中,这种反复的分析-优化迭代方法是非常有效的。

性能优化是一个持续的旅程。为了编写出高效的Go代码,我们不仅要深入理解Go语言的特性,还要善于使用其丰富的性能分析工具。只有这样,你的Go应用才能真正发挥其最大潜能。