Go pprof 的使用

一、概述

gopprof 工具可以用来监测进程的运行数据,用于监控程序的性能,对内存使用和 CPU 使用的情况统信息进行分析。

官方提供了两个包:runtime/pprofnet/http/pprof,前者用于普通代码的性能分析,后者用于 web 服务器的性能分析。

官方文档:

https://golang.org/pkg/runtime/pprof/

https://golang.org/pkg/net/http/pprof/#Index

https://github.com/google/pprof/blob/master/doc/pprof.md

二、 runtime/pprof 的使用

该包提供了一系列用于调试信息的方法,可以很方便的对堆栈进行调试。

通常用得多得是以下几个:

  • StartCPUProfile:开始监控 cpu 。
  • StopCPUProfile:停止监控 cpu,使用 StartCPUProfile 后一定要调用该函数停止监控。
  • WriteHeapProfile:把堆中的内存分配信息写入分析文件中。

示例代码

编译运行,会根据入参生成两个对应的数据文件:

使用 go tool pprof 命令即可分析。

三、 go tool pprof

生成数据文件后使用 go tool pprof file 进入交互式界面进行数据分析,输入 help 可以查看命令。

用法详见:pprof.md

1.top

命令格式:top [n],查看排名前 n 个数据,默认为 10 。

2.tree

命令格式:tree [n],以树状图形式显示,默认显示 10 个。

3.web

以 web 形式查看,在 web 服务的时候经常被用到,需要安装 gv 工具,官方网页:https://www.graphviz.org/。

linux 用户使用 yum install graphviz 安装即可,当然,纯命令行界面是不能查看的。

windows 用户下载 msi 包安装后需要把安装目录下的 bin 目录添加到环境变量才行。

如果没有安装 gv 工具,使用会报错:

Cannot find dot, have you installed Graphviz?

exec: "firefox": executable file not found in $PATH

4. 其他

其他的都是以不同形式展现出来,大同小异,以后有时间再测试。

四、 web 服务器监测

在 web 服务器中监测只需要在 import 部分加上监测包即可:

当服务开启后,在当前服务环境的 https://ip:port/debug/pprof 页面可以看到当前的系统信息:

点击查看具体的信息:

通常可以对服务器在一段时间内进行数据采样,然后分析服务器的耗时和性能:

使用该命令后会对服务进行 30s 的采样,这段时间内可以尽量多使用 web 服务,生成多一些统计数据。

使用 web 命令后会生成采样时间内每个系统调用的耗时分析,可以用来分析 web 服务的响应时间都用在哪了:

发表评论