golang pprof
虽然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/,就可以看到火焰图