golang pprof

发布时间 2023-07-14 09:51:13作者: 秋来叶黄

虽然go提供了很多便于并发的功能,但是写出一个高性能的程序还是有一定挑战的。当程序遇到性能问题,go同样提供了比较好的工具便于分析。

引入net/http/pprof"

import (
    _ "net/http/pprof"
)

在main函数最后启动http server

func main() {
    ....
    http.ListenAndServe("localhost:8000", nil)
}

这个端口随便配,程序启动后会阻塞在这条语句,然后打开网址http://localhost:8000/debug/pprof/,会得到如下界面

具体每行的意思都有解释,这里需要注意一下,profile是CPU耗时相关的,但是有时候这里数据是0,比如这里的图,因为什么呢,因为我们开启了太多的协程,或者主要工作都放在协程中了,所以需要看的是goroutine

创建火焰图

点击上面的每一项,有数据的会显示很多文本信息,如何更直观的查看呢,可以使用go tool pprof -http=:8081 http://localhost:8000/debug/pprof/goroutine-http指定创建火焰图后打开的网页端口,后面跟着的就是上面的网址,网址的最后一项goroutine就是你想看的内容,与上面网页上信息对应。
访问http://localhost:8081/ui/,就可以看到火焰图