pprof简单应用

1. pprof相关

1.1. pprof数据采集

1.1.1. dump方式

  • 项目中添加代码,以dump文件方式采集数据,并生成待分析文件
// 创建分析文件
file, err := os.Create("./cpu.prof")
if err != nil {
    fmt.Printf("创建采集文件失败, err:%v\n", err)
    return
}

// 进行cpu数据的获取
pprof.StartCPUProfile(file)
defer pprof.StopCPUProfile()

1.1.2. http方式

  • 项目的import中添加代码,以http方式提供采集到的数据
// import中添加
_ "net/http/pprof"

// 代码中添加http服务
http.ListenAndServe("0.0.0.0:6061", nil)

1.2. pprof数据分析

1.2.1. 解析文件方式

  • 生成报告方式
go tool pprof -svg {具体profFile路径} 
// 例如
go tool pprof -svg cpu.prof
  • 提供http服务方式<font color='red'>(建议使用第二种)</font>
go tool pprof -http=172.21.51.109:60610 cpu.prof
go tool pprof -http=0.0.0.0:6066 http://172.21.51.109:60610/debug/pprof/heap

1.2.2. http接口分析

  • 界面查看原始数据
http://{ip}:{port}/debug/pprof
  • 访问http服务端分析数据
go tool pprof http://172.21.51.109:60610/debug/pprof/{type} // type 为界面查看原始数据中的各种数据类型

2. 火焰图(针对http方式数据分析)

2.1. 安装

  • 安装go-torch(go mod方式)
go get github.com/uber/go-torch
  • 安装FlameGraph脚本
git clone https://github.com/brendangregg/FlameGraph.git
cp FlameGraph/flamegraph.pl /usr/bin

2.2. 运行

// 分析cpu
go-torch -u http://172.21.51.109:60610 --seconds 60 -f cpu.svg

// 分析mem
go-torch  http://172.21.51.109:60610/debug/pprof/heap --colors mem  -f mem.svg

3. 内存问题排查

  1. 每隔一段时间使用heap获取profile,比如间隔1分钟执行以下命令两次,可以得到两个profile文件
go tool pprof http://172.21.51.109:60610/debug/pprof/heap
  1. 使用base把001文件作为基准,然后使用002和001进行对比
go tool pprof -base pprof.demo2.alloc_objects.alloc_space.inuse_objects.inuse_space.001.pb.gz pprof.demo2.alloc_objects.alloc_space.inuse_objects.inuse_space.002.pb.gz
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文地址:Golang 大杀器之性能剖析 PProf 前言 写了几吨代码,实现了几百个接口。功能测试也通过了,终于...
    EDDYCJY阅读 73,116评论 7 78
  • 基本介绍 pprof 是在做性能优化前的性能分析工具。 安装: go get -u github.com/goog...
    Robin92阅读 22,992评论 0 5
  • 相信很多人都听过“雷神 3”关于性能优化的故事。在一个 3D 游戏引擎的源码里,John Carmack 将 1/...
    饶全成阅读 1,020评论 0 2
  • 背景 线上性能问题的定位和优化是程序员的必经之路,定位的方式可以多种多样,常见的有观察线程栈,排查日志和做性能分析...
    _二师兄_阅读 1,181评论 0 1
  • pprof工具原理来自于在Scala Days 2011上Robert Hundt发表的一篇名为 Loop Rec...
    天地一小儒阅读 819评论 0 1