PProf

基本使用

1、runtime/pprof:采集程序(非 Server)的运行数据进行分析
2、net/http/pprof:采集 HTTP Server 的运行时数据进行分析,这个其实在上面的功能中包了一层提供了http接口。

#所有过去内存分配的采样
go tool pprof http://127.0.0.1:8080/debug/pprof/allocs

#对活动对象的内存分配进行采样(活动)
go tool pprof http://127.0.0.1:8080/debug/pprof/heap

# 下载 cpu profile,默认从当前开始收集 30s 的 cpu 使用情况,需要等待 30s
go tool pprof http://127.0.0.1:8080/debug/pprof/profile
# wait 120s
go tool pprof http://127.0.0.1:8080/debug/pprof/profile?seconds=120    

#导致同步原语阻塞的堆栈跟踪
go tool pprof http://127.0.0.1:8080/debug/pprof/block

#所有当前goroutine的堆栈跟踪
go tool pprof http://127.0.0.1:8080/debug/pprof/goroutine

#争用互斥锁持有者的堆栈跟踪
go tool pprof http://127.0.0.1:8080/debug/pprof/mutex

#当前程序的执行轨迹。
go tool pprof http://127.0.0.1:8080/debug/pprof/trace
allocs:所有过去内存分配的采样
block:导致同步原语阻塞的堆栈跟踪
cmdline:当前程序的命令行调用
goroutine:所有当前goroutine的堆栈跟踪
heap:活动对象的内存分配的采样。在获取堆样本之前,可以指定gc GET参数来运行gc。
metux:争用互斥锁持有者的堆栈跟踪
profile:CPU配置文件。您可以在seconds GET参数中指定持续时间。获取配置文件后,使用go tool pprof命令调查配置文件
threadcreate:导致创建新操作系统线程的堆栈跟踪
trace:当前程序的执行轨迹。您可以在seconds GET参数中指定持续时间。获取跟踪文件后,使用go tool trace命令调查跟踪

对于非安全的https

go tool pprof https+insecure://10.202.62.135:8443/debug/pprof/profile

curl --insecure https://localhost:6443/debug/pprof/profile > profile.profile
go tool pprof http://localhost:9909/debug/pprof/profile?seconds=60

flat:给定函数上的运行耗时
flat% :给定函数上的CPU运行耗时占比
sum% :给定函数累积使用CPU总比例
cum :当前函数加上它之前的调用运行总耗时
cum% :当前函数加上他之前的调用CPU运行耗时占比

火焰图

go get -u github.com/google/pprof

pprof -http=:8080 profile文件名

访问web地址 localhost:8080,如果上面的命令不加-http=:8080,则默认进入交互式控制台,输入web命令,生成一个文件自动启动浏览器自动打开,火焰图明显比上面Go官方的可视化界面要精致许多。

如何观察下面的火焰图呢?Y轴表示调用栈,每一层都是一个函数,调用栈越深火焰就越高,最底部是正在执行的函数,上面是它的父函数,X轴表示这个函数的抽样数,如果一个函数在X轴占的越宽,代表抽样数越高,执行CPU的时间越长,注意,X轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的.

火焰图就是看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code