golang调试
一、pprof
在计算机性能调试领域里,profiling 是指对应用程序的画像,画像就是应用程序使用 CPU 和内存的情况。 Go语言是一个对性能特别看重的语言,因此语言中自带了 profiling 的库。
- runtime/pprof:采集程序(非server)的运行数据进行分析
- net/http/pprof:采集HTTP Server的运行时数据进行分析
pprof开启后,每隔一段时间(10ms)就会收集下当前的堆栈信息,获取各函数占用的CPU以及内存资源。最后通过对这些数据进行分析,形成一个性能分析报告。
ps:我们只应该在性能测试的时候才在代码中引入pprof。
pprof以profile.proto读取分析样本的集合,并生成报告以可视化并帮助分析数据(支持文本和图形报告)。
profile.proto 是一个 Protocol Buffer v3 的描述文件,它描述了一组 callstack 和 symbolization 信息, 作用是表示统计分析的一组采样的调用栈,是很常见的 stacktrace 配置文件格式。
模式
- Report generation:报告生成
- Interactive terminal use:交互式终端使用
- Web interface:Web 界面
内容
- CPU Profiling:CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗 CPU 周期时花费时间的位置
- Memory Profiling:内存分析,在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏
- Block Profiling:阻塞分析,记录 goroutine 阻塞等待同步(包括定时器通道)的位置
- Mutex Profiling:互斥锁分析,报告互斥锁的竞争情况
使用
import ( _ "net/http/pprof")
1) web界面访问:http://127.0.0.1:6060/debug/pprof/
2)交互式终端 go tool pprof http://localhost:6060/debug/pprof/profile?seconds=60 // cpu
go tool pprof http://localhost:6060/debug/pprof/heap // mem
3) 使用go tool pprof可视化工具
需要先编写测试用力,生成cpu.prof mem.prof: go test -bench=. -cpuprofile=cpu.prof
go tool pprof -http=:8080 cpu.prof
二、go tool trace
参考:
1. pprof性能调优 topgoer.com
2. 像大神一样调试 Go (译文) | Go主题月 https://betterprogramming.pub/debug-go-like-a-pro-213d4d74e940
3. Go 大杀器之性能剖析 PProf 煎鱼
4. Go 大杀器之跟踪剖析 trace 煎鱼