在平常的开发中,golang为我们提供了非常方便的性能测试工具–pprof

激活pprof

在main函数中,增加下面代码用来激活pprof:

go func() {
	http.ListenAndServe("localhost:10239", nil)
}()

这段代码就是在程序中创建一个http的监听服务

pprof在线查看

当运行代码时,就可以在http://localhost:10239/debug/pprof/中查看相关数据:

/debug/pprof/
Types of profiles available:
Count Profile
146 allocs
0 block
0 cmdline
70 goroutine
146 heap
0 mutex
0 profile
10 threadcreate
0 trace
full goroutine stack dump
Profile Descriptions:

allocs:在过去时间内分配的栈内存

block:导致同步阻塞的堆栈跟踪

cmdline:当前程序的命令行调用

goroutine:所有当前 goroutine 的堆栈跟踪

heap:在过去时间内分配的堆内存。 您可以指定 gc GET 参数以在获取堆样本之前运行 GC。

mutex:竞争互斥锁持有者的堆栈跟踪

profile:CPU profile。 您可以在 seconds GET 参数中指定持续时间。 获取profile文件后,使用 go tool pprof 命令调查配置文件。

threadcreate:导致创建新操作系统线程的堆栈跟踪

trace:当前程序执行的轨迹。 您可以在 seconds GET 参数中指定持续时间。 获取跟踪文件后,使用 go tool trace 命令调查跟踪。

graphviz安装

pprof 能够借助 grapgviz 图形化,生成一个 svg 格式的文件,直接在浏览器里打开。

下载链接https://graphviz.org/download/,这里下载windows的对应版本windows_10_cmake_Release_graphviz-install-3.0.0-win64.exe,下载完成后安装即可。

也可以下载windows_10_msbuild_Release_graphviz-3.0.0-win32.zip,下载完成后解压,然后把解压路径配置到系统环境变量下面即可。

pporf命令查看

一般使用命令查看会更清楚些,在安装玩grapgviz之后,会自动在浏览器中打开,也可也使用web命令打开,下面是一些常用命令:

查看 30 秒内的 CPU 信息

go tool pprof http://localhost:10239/debug/pprof/profile?seconds=30

查看堆栈调用信息

go tool pprof http://localhost:10239/debug/pprof/heap

查看 goroutine 阻塞

go tool pprof http://localhost:10239/debug/pprof/block

收集 5 秒内的执行路径

go tool pprof http://localhost:10239/debug/pprof/trace?seconds=5

互斥锁的堆栈跟踪

go tool pprof http://localhost:10239/debug/pprof/mutex

查看远程服务器的pprof

有时候我们需要查看远程服务器的性能情况,可以用下面的命令

go tool pprof -http localhost:10239 localhost:10239/debug/pprof/heap?seconds=30

把localhost:10239改成对应的服务器IP和端口即可

1+

本文为原创文章,转载请注明出处,欢迎访问作者网站(和而不同)

发表评论

error: Content is protected !!