go性能分析工具pprof
背景
之前在做一个系统采集器,辛辛苦苦写完了,结果性能测试不堪入目。想优化又不知从哪里下手。后来知道golang自带一套性能分析工具十分强大。
pprof能做什么
性能分析
pprof 库是用于可视化和分析性能分析数据的工具,它以 profile.proto 读取分析样本的集合,并生成报告以可视化并帮助分析数据(支持文本和图形报告)
pprof有两个包:
net/http/pprof
runtime/pprof
其实net/http/pprof中只是使用runtime/pprof包来进行封装了一下,并在http端口上暴露出来
实例
package main
import (
"fmt"
"log"
"net/http"
_ "net/http/pprof"
"time"
)
func main() {
go func() {
log.Println(http.ListenAndServe("localhost:6060", nil))
}()
go func() {
for {
fmt.Println("running...")
time.Sleep(10 * time.Millisecond)
}
}()
select {}
}
我们在本地6060端口开放了一个服务端,并在后台用一个循环来产生一些cpu消耗,开启后我们可以访问http://localhost:6060/debug/pprof/
如图
显示runtime的信息,如此时有9个协程在运行等,点击可以查看使用详细信息。
当点击profile后,会自动生成一个profile文件并下载到本地。
(这里还可以直接go tool pprof http://localhost:6060/debug/pprof/profile)
我们可以利用go tool pprof对这个文件进行分析。
help有使用说明,这里不再一一介绍
我们输入gif,在当前目录生成一个gif图片
该图片是pprof对程序一段时间的cpu采样分析。
或者直接topN查看前N个消耗cpu最多的函数
借此我们可以了解cpu的调用情况帮助我们优化性能。方法不再一一介绍。
更多详细用法https://studygolang.com/pkgdoc