go的pprof可以用来对服务的性能进行检测,其中net/http/pprof包用来检测web服务器的相关的性能的分析,包括goroutine的数量,heap的大小问题。
一、简单使用
package main
import (
"fmt"
"log"
"net/http"
_ "net/http/pprof"
"time"
)
func main() {
// 开启pprof
go func() {
log.Println(http.ListenAndServe("localhost:6060", nil))
}()
go hello()
select {}
}
func hello() {
for {
go func() {
fmt.Println("hello word")
}()
time.Sleep(time.Millisecond * 1)
}
}
如上所示,实现了一个简单函数,在for循环内部不停的创建go 并调用IO输出hello word。 在主函数的内部通过http.ListenAndServe(“localhost:6060”, nil) 监听6060端口,等待用户查看相关的性能信息。一定要注意包含_ “net/http/pprof”这个包。。 以上代码就实现了一个pprof监控性能的代码,我们只需要在浏览器中执行http://localhost:6060/debug/pprof/
就会得到相对应的程序的信息。
由此可见,我们这个程序此时正有六个go协程正在运行。
1.在cmd中使用web命令
这里要先安装Graphviz,具体参考Graphviz安装及使用
C:\Users\lenovo>go tool pprof http://localhost:6060/debug/pprof/profile
Fetching profile over HTTP from http://localhost:6060/debug/pprof/profile
Saved profile in C:\Users\lenovo\pprof\pprof.samples.cpu.003.pb.gz
Type: cpu
Time: Apr 2, 2019 at 5:19pm (CST)
Duration: 30s, Total samples = 520ms ( 1.73%)
Entering interactive mode (type "help" for commands, "o" for options)
(pprof) web
浏览器会自动打开这个svg文件,也可以手动打开file:///C:/Users/lenovo/AppData/Local/Temp/pprof002.svg
2.上面使用web生成了svg文件,也可以使用callgrind生成out文件
(pprof) callgrind
Generating report in profile001.callgraph.out
这个文件在C:\Users\lenovo
里找到了,安装Windows版的qcachegrind,然后使用qcachegrind.exe打开这个out文件。使用qcachegrind可以在各个函数之间自由跳转,查看函数内部的CPU占用情况,相对其他格式要更加灵活方便。
有疑问加站长微信联系(非本文作者)