go性能分析工具--pprof使用

之前线上遇到了内存泄露,就在找工具来分析,刚好还是个纯go的项目, 就找到pprof. 来串一下如何使用吧;

pprof可以支持多种类型的采样分析. 可以分析cpu或者内存或者goroutine等

集成很简单, 在工程中引入如下代码:


import _ "net/http/pprof"

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

注: runtime/pprof: 手动调用start/stop api进行采集,可定制化分析;
net/http/pprof: 采集Http Server 的运行时数据进行分析;

这时候如果访问: http://127.0.0.1:6060/debug/pprof 就可以看到web页面的统计. 及对应的解释:

在这里插入图片描述
在这里插入图片描述
这里的信息都是实时变动的, 可以点击蓝色的链接, 能看到具体的信息, 如goroutine:
在这里插入图片描述
还可以把信息保存到本地进行分析;

下载方式: 直接运行


go tool pprof -seconds=30 http://localhost:6060/debug/pprof/XXX


执行该命令, 需等30s(可调整seconds值),pprof 会进行 CPU Profiling.结束后将默认进入 pprof 的交互式命令模式,可以对分析的结果进行查看或导出.具体可执行 pprof help 查看命令说明

也可以导出为文件

curl http://localhost:6060/debug/pprof/profile?seconds=10 > cpu.out

比较常用的top list和web. top可以看到消耗前n的函数. 默认top是top10
在这里插入图片描述

根据top中的展示, 看第一个函数占用比较多,可以用list看看具体的代码:

可以看到占比比较多的行数的具体位置. 再去做响应优化(此代码只是展示使用方式)

web就是可以可视化观看了. 不过需要先安装graphviz. web指令会生成一张svg格式的图片, 并用默认程序打开;类似下图:

在这里插入图片描述
线越深, 框越大, 所以占用的越多; 在菜单栏, 还可以多种方式进行切换.更加直观分析;

上述是直接在程序所在机器上执行, 如果说down下来的记录在其他机器上, 如果查看. 那么执行:
在这里插入图片描述
会在默认程序打开如上的web图:

那么在实际应用中, 可能需要排查cpu占用高/内存占用高/协程泄露/锁等等问题, 都可通过它进行分析. 是个好东西~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光下是个孩子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值