前言
就像 Java 要会分析堆栈一样,Go 也一样!
PProf 是分析性能、分析数据的工具,PProf 用 profile.proto 读取分析样本的集合,并生成可视化报告,以帮助分析数据(支持文本和图形报告)。
正文
1. 采样方式
- runtime/pprof:采集程序(非 Server)指定区块的运行数据进行分析。
- net/http/pprof: 基于 HTTP Server 运行,并且可以采集运行时的数据进行分析。
- go test: 通过运行测试用例,指定所需标识进行采集。
2. 使用模式
- Report Generation: 报告生成。
- Interactive Terminal Use: 交互式终端使用。
- Web Interface: Web 界面
3. 可以做什么
- CPU Profiling:CPU 分析。按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,确定应用程序在主动消耗 CPU 周期时花费时间的位置。
- Memory Profile: 内存分析。在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏。
- Block Profiling: 阻塞分析。记录 goroutine 阻塞等待同步(包括定时器通道)的位置,默认不开启,需要调用 runtime.SetBlockProfileRate 进行设置。
- Mutex Profile: 互斥锁分析。报告互斥锁的竞争情况,默认不开启,需要调用 runtime.SetMutexProfileFraction 进行设置。
- Goroutine Profiling: goroutine 分析,可以对当前应用程序正在运行的 goroutine 进行堆栈跟踪和分析。这项功能在实际排查中会经常用到,因为很多问题出现时的表象就是 goroutine 暴增,而这时候我们要做的事情之一就是查看应用程序中的 goroutine 正在做什么事情,因为什么阻塞了,然后再进行下一步分析。