当go进程出现性能问题时,可以通过获取运行期间性能数据,通过火焰图的形势直观的分析,本文主要讲解如何简单高效的获取go程序火焰图。
条件:
1、有go运行环境,即需要安装go。
检测当前环境是否具备,执行go version查看,有版本显示即当前环境可用。
2、进程开启pprof。
例如本机的9010端口,比如本机IP为127.0.0.1,则进程运行后可通过http://127.0.0.1:9010/debug/pprof访问。
进程如何开启pprof?
核心代码示例:
package main
import (
"net/http"
_ "net/http/pprof"
"os"
"runtime"
)
func main() {
runtime.SetBlockProfileRate(1) // 开启对阻塞操作的跟踪,block
runtime.SetMutexProfileFraction(1) // 开启对锁调用的跟踪,mutex
if err := http.ListenAndServe(":9010", nil); err != nil {
os.Exit(1)
}
}
生成火焰图:
1、获取程序性能数据,执行下面命令:
性能数据文件会保存在~/pprof目录下,例如格式为:
pprof.xxx.samples.cpu.001.pb.gz
其中xxx是go程序名字
2、展示火焰图:
其中-http参数指定web端的服务地址,本机的公网ip加一个未被占用的端口即可,可通过这个地址直接在浏览器打开访问。
cd ~/pprof
go tool pprof -http=10.xx.xx.xx:8083 ./pprof.xxx.samples.cpu.001.pb.gz
效果如下:
通过浏览器打开:
至此,简单版火焰图就生成好了,可以分析性能数据了 。总之,安装好go环境,执行相关命令,即可获取火焰图哦~~,简单易上手。