天天看点

go语言中性能分析工具pprof使用心得

作者:石老师小跟班
pprof是一个go程序性能分析工具,可以用于分析go程序的CPU使用率、内存使用情况等

项目中如何使用pprof

package main

import (
	"log"
	"net/http"
	_ "net/http/pprof" //初始化包
	"os"
	"runtime"
)

func main() {
	runtime.GOMAXPROCS(1)              //设置只使用1个cpu
	runtime.SetBlockProfileRate(1)     //开启对阻塞的追踪
	runtime.SetMutexProfileFraction(1) //开启对锁的追踪
	go func() {
		//启动一个http.server
		if err := http.ListenAndServe(":6060", nil); err != nil {
			log.Fatal(err)
		}
		os.Exit(0)
	}()
  //测试用
	for {	}
}
           

使用pprof

使用 go build 进行构建

浏览器打开 http://localhost:8080/debug/pprof/,即可看到如下页面

go语言中性能分析工具pprof使用心得
指标说明:
 allocs	内存分配情况的采样信息	可以用浏览器打开,但可读性不高
blocks	阻塞操作情况的采样信息	可以用浏览器打开,但可读性不高
cmdline	显示程序启动命令及参数	可以用浏览器打开,这里会显示 ./go-pprof-practice
goroutine	当前所有协程的堆栈信息	可以用浏览器打开,但可读性不高
heap	堆上内存使用情况的采样信息	可以用浏览器打开,但可读性不高
mutex	锁争用情况的采样信息	可以用浏览器打开,但可读性不高
profile	CPU 占用情况的采样信息	浏览器打开会下载文件
threadcreate	系统线程创建情况的采样信息	可以用浏览器打开,但可读性不高
trace 程序运行跟踪信息	浏览器打开会下载文件           

用法一: 排查CPU占用过高

//命令
go tool pprof http://localhost:6060/debug/pprof/profile
//再输入 top
//再输入 list 标识名 即可查询到相关详细信息,如下图显示,可以找到哪里占用cpu比较高,可以看到,
//这里有一个大循环,是占用大量cpu的,           
go语言中性能分析工具pprof使用心得

用法二: 排查占用内存过高

//命令一样,只不过 list的对象名不同而已
//1.  go tool pprof http://localhost:6060/debug/pprof/heap
//2. top  
//3. list 对象名           
go语言中性能分析工具pprof使用心得

用法三: 排查频繁内存回收

通过如下命令 GODEBUG=gctrace=1 ./main | grep gc 可以查看到程序的内存回收情况
//命令一样,只不过 list的对象名不同而已
//1.  go tool pprof http://localhost:6060/debug/pprof/allocs
//2. top  
//3. list 对象名           
go语言中性能分析工具pprof使用心得

用法四: 排查协程泄露

//命令一样,只不过 list的对象名不同而已
//1.  go tool pprof http://localhost:6060/debug/pprof/goruntine
//2. top  
//3. list 对象名           
go语言中性能分析工具pprof使用心得

用法五: 排查锁的争用

//命令一样,只不过 list的对象名不同而已
//1.  go tool pprof http://localhost:6060/debug/pprof/mutex
//2. top  
//3. list 对象名           
go语言中性能分析工具pprof使用心得

用法六: 排查阻塞的情况

//命令一样,只不过 list的对象名不同而已
//1.  go tool pprof http://localhost:6060/debug/pprof/block
//2. top  
//3. list 对象名           
go语言中性能分析工具pprof使用心得

结语:

其实还有 火焰图等相关知识,但是本次遇到的bug,没有用到,这里就不写了,感兴趣的小伙伴,可以自己查资料哈

继续阅读