当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环境,执行相关命令,即可获取火焰图哦~~,简单易上手。