本文主要是介绍Golang pprof 工具使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Golang pprof分析工具使用
1. 概述
go
的pprof
工具可以用来监测进程的运行数据,用于监控程序的性能,对内存使用和CPU使用的情况统信息进行分析。
官方提供了两个包:runtime/pprof
和net/http/pprof
,前者用于普通代码的性能分析,后者用于web服务器的性能分析
2. runtime/pprof的使用
该包提供了一系列用于调试信息的方法,可以很方便的对堆栈进行调试
StartCPUProfile
:开始监控cpu。StopCPUProfile
:停止监控cpu,使用StartCPUProfile后一定要调用该函数停止监控。WriteHeapProfile
:把堆中的内存分配信息写入分析文件中
测试代码
package mainimport ("flag""runtime/pprof""log""runtime""math/rand""os""time"
)var cpuprofile = flag.String("cpuprofile", "", "write cpu profile `file`")
var memprofile = flag.String("memprofile", "", "write memory profile to `file`")const (col = 10000row = 10000
)func main() {flag.Parse()if *cpuprofile != "" {f, err := os.Create(*cpuprofile)if err != nil {log.Fatal("could not create CPU profile: ", err)}if err := pprof.StartCPUProfile(f); err != nil { //监控cpulog.Fatal("could not start CPU profile: ", err)}defer pprof.StopCPUProfile()}// 主逻辑区,进行一些简单的代码运算x := [row][col]int{}s := rand.New(rand.NewSource(time.Now().UnixNano()))for i := 0; i < row; i++{for j := 0; j < col; j++ {x[i][j] = s.Intn(100000)}}for i := 0; i < row; i++{tmp := 0for j := 0; j < col; j++ {tmp += x[i][j]}}if *memprofile != "" {f, err := os.Create(*memprofile)if err != nil {log.Fatal("could not create memory profile: ", err)}runtime.GC() // GC,获取最新的数据信息if err := pprof.WriteHeapProfile(f); err != nil { // 写入内存信息log.Fatal("could not write memory profile: ", err)}f.Close()}
}
go build
./pprof -cpuprofile cpu.prof -memprofile mem.prof // 会产生cpu分析文件和内存分析文件
然后本地运行go tool pprof cpu.prof
就可以进入命令行,使用性能分析工具查看数据
- top:命令格式:top [n],查看排名前n个数据,默认为10
- tree:命令格式:tree [n],以树状图形式显示,默认显示10个
- web:以web形式查看,在web服务的时候经常被用到,需要安装gv工具(macos brew install graphviz)
这篇关于Golang pprof 工具使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!