package main
import (
"net/http"
_ "net/http/pprof"
)
func main() {
go http.ListenAndServe(":89", nil)
// 业务逻辑
}
浏览器访问 http://127.0.0.1:89/debug/pprof 通过web方式查看性能监控信息,以下是一些参数信息
命令行方式查看性能监控信息,执行以下命令进行信息采样,可以指定采样时间,单位为秒,采样完后用top命令可以查看具体信息
go tool pprof http://127.0.0.1:89/debug/pprof/profile?seconds=30
对其中某一项采样,比如协程
go tool pprof http://127.0.0.1:89/debug/pprof/goroutine?debug=1
采样完后,会生成一个 pprof.goroutine.xxx.pb.gz 的文件,用以下命令对采样的文件进行分析生成火焰图等信息
go tool pprof -http=":88" pprof.goroutine.xxx.pb.gz
| 类型 | 描述 |
|---|---|
| allocs | 内存分配情况的采样信息 |
| blocks | 阻塞操作情况的采样信息 |
| cmdline | 显示程序启动命令参数及其参数 |
| goroutine | 显示当前所有协程的堆栈信息 |
| heap | 堆上的内存分配情况的采样信息 |
| mutex | 锁竞争情况的采样信息 |
| profile | cpu占用情况的采样信息,点击会下载文件 |
| threadcreate | 系统线程创建情况的采样信息 |
| trace | 程序运行跟踪信息 |
| 类型 | 描述 | 举例 |
|---|---|---|
| flat | 该函数占用CPU的耗时 | selectnbrecv占用CPU的耗时是12.29s |
| flat% | 该函数占用CPU的耗时的百分比 | selectnbrecv耗时:12.29s,cpu总耗时:29.14,12.29/29.14=42.18 |
| sum% | top命令中排在它上面的函数以及本函数flat%之和 | chanrecv:42.18%+30.47% = 72.65% |
| cum | 当前函数加上该函数调用之前的累计CPU耗时 | chanrecv:8.88+0.54=9.42 |
| cum% | 当前函数加上该函数调用之前的累计CPU耗时的百分比 | 9.42/29.14=32.33% |
| 最后一列 | 当前函数名称 | - |