Go pprof
在平常的开发中,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和端口即可