Mac环境使用pprof进行性能分析分析

一、环境部署

安装graphviz

graphviz用于生成.svg格式图形数据,用go tool pprof进行分析时,生成web图的依赖,mac可通过brew安装

brew install graphviz

安装过程中遇到缺少依赖的情况会报找不到文件的错误,安装相应的依赖即可
在这里插入图片描述
安装好缺少的依赖,继续通过brew安装graphviz即可

安装并配置FlameGraph

git下载flameGraph

git clone https://github.com/brendangregg/FlameGraph.git

将flameGraph配置到mac系统的环境变量

sudo vim ~/.bash_profile

输入密码,在最后一行添加环境变量,$PATH后面是flameGraph的保存路径

export PATH=$PATH:/usr/local/FlameGraph

编辑完需要 source ~/.bash_profile 生效,可通过以下命令测试

flamegraph.pl -h

二、代码配置

在服务中定义监控数据项的路由

import (

	pprof "net/http/pprof"
)
func init() {
	registerHandler()
	registerHttpPprofHandler()
}
// registerHttpPpofHandler  注册性能分析相关路由
func registerHttpPprofHandler() {
	server.RegisterHandleFunc("/debug/pprof/", pprof.Index)
	server.RegisterHandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
	server.RegisterHandleFunc("/debug/pprof/profile", pprof.Profile)
	server.RegisterHandleFunc("/debug/pprof/symbol", pprof.Symbol)
	server.RegisterHandleFunc("/debug/pprof/trace", pprof.Trace)
	server.RegisterHandleFunc("/debug/pprof/{name}", pprof.Index)
}

三、使用go tool pprof

注册完后访问http://localhost/debug/pprof端点,它会得到类似下面的页面内容:
在这里插入图片描述

几个重点需要关注的页面:

  • /debug/pprof/profile:访问这个链接会自动进行 CPU profiling,持续30s,并生成一个文件供下载,可以通过带参数?=seconds=60进行60秒的数据采集
  • /debug/pprof/heap:Memory Profiling 的路径,访问这个链接会得到一个内存 Profiling 结果的文件
  • /debug/pprof/block:block Profiling 的路径
  • /debug/pprof/goroutines:运行的
  • goroutines 列表,以及调用关系

以cpu性能分析为例:

go tool pprof http://127.0.0.1:8010/debug/pprof/profile

等待30s以后会生成性能分析,并出现交互命令,通过web命令可打开浏览器查看性能图
在这里插入图片描述
图中每个方框对应应用程序运行的一个函数,方框越大代表函数执行的时间越久(函数执行时间会包含它调用的子函数的执行时间,但并不是正比的关系);方框之间的箭头代表着调用关系,箭头上的数字代表被调用函数的执行时间。

这里还要提两个比较有用的方法,如果应用比较复杂,生成的调用图特别大,看起来很乱,有两个办法可以优化:

  • 使用 web funcName 的方式,只打印和某个函数相关的内容

  • 运行 go tool pprof 命令时加上 --nodefration 参数,可以忽略内存使用较少的函数,比如–nodefration=0.05表示如果调用的子函数使用的 CPU、memory 不超过 5%,就忽略它,不要显示在图片中。

四、火焰图分析

生成的调用图有时很复杂,可借助火焰图进行分析,需要提前安装FlameGraph。
go tool pprof会在本地保存一份profile文件,通过go tool pprof命令带上-http打开profile文件即可在浏览器查看

go tool pprof -http localhost:6001 /Users/xiangzhe/pprof/pprof.samples.cpu.005.pb.gz

切换到flameGraph即可查看火焰图
在这里插入图片描述

每个方块代表一个函数,它下面一层表示这个函数会调用哪些函数,方块的大小代表了占用 CPU 使用的长短,光标移动到方块可查看cpu占用时间,点击方块可定位到下一层级。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值