Skip to main content

pprof

实用go pprof使用指南

简介

pprof是性能调试工具,可以生成类似火焰图、堆栈图,内存分析图等。

整个分析的过程分为两步:1. 导出数据,2. 分析数据。

导出数据

两步,第一步,在引用中加上

"net/http"
_ "net/http/pprof"

第二步,在代码开始运行的地方加上

go func() {
log.Println(http.ListenAndServe(":6060", nil))
}()

接着,我们访问http://127.0.0.1:6060/debug/pprof/,即可看到

allocs:查看过去所有内存分配的样本(历史累计)。
block:查看导致阻塞同步的堆栈跟踪(历史累计)。
cmdline: 当前程序的命令行的完整调用路径(从程序一开始运行时决定)。
goroutine:查看当前所有运行的 goroutines 堆栈跟踪(实时变化)。
heap:查看活动对象的内存分配情况(实时变化)。
mutex:查看导致互斥锁的竞争持有者的堆栈跟踪(历史累计)。
profile: 默认进行 30s 的 CPU Profiling,得到一个分析用的 profile 文件(从开始分析,到分析结束)。
threadcreate:查看创建新 OS 线程的堆栈跟踪(一般没啥用)。
trace:https://mp.weixin.qq.com/s/I9xSMxy32cALSNQAN8wlnQ

注意,默认情况下是不追踪block和mutex的信息的,如果想要看这两个信息,需要在代码中加上两行:

runtime.SetBlockProfileRate(1) // 开启对阻塞操作的跟踪,block  
runtime.SetMutexProfileFraction(1) // 开启对锁调用的跟踪,mutex

要看图片,要先安装graphviz

参考与致谢

评论区