【后端开发】字节跳动青训营之性能分析工具pprof
性能分析工具pprof
- 一、测试程序介绍
- 二、pprof工具安装与使用
- 2.1 pprof工具安装
- 2.2 pprof工具使用
资料链接:
- 项目代码链接
- 实验指南
- pprof使用指南
一、测试程序介绍
package main
import (
"log"
"net/http"
_ "net/http/pprof" // 自动注册handler到http server, 方便通过http接口获取程序运行采样报告
"os"
"runtime"
"time"
"github.com/wolfogre/go-pprof-practice/animal"
)
func main() {
log.SetFlags(log.Lshortfile | log.LstdFlags)
log.SetOutput(os.Stdout)
runtime.GOMAXPROCS(1) // 限制CPU使用数,避免过载
runtime.SetMutexProfileFraction(1) // 开启对锁调用的跟踪
runtime.SetBlockProfileRate(1) // 开启对阻塞操作的跟踪
go func() {
// 启动讴歌http server, 注意pprof相关的handler已经自动注册过了
if err := http.ListenAndServe(":6060", nil); err != nil {
log.Fatal(err)
}
os.Exit(0)
}()
for {
for _, v := range animal.AllAnimals {
v.Live()
}
time.Sleep(time.Second)
}
}
二、pprof工具安装与使用
2.1 pprof工具安装
首先安装pprof工具:
go get -d github.com/wolfogre/go-pprof-practice
cd /Path to go-pprof-practice
go build
上述步骤将pprof编译成能够直接在windows系统中直接运行的.exe程序。
之后直接使用下述命令即可启动:
./go-pprof-practice
2.2 pprof工具使用
- 基本服务类型:
类型 | 描述 | 备注 |
---|---|---|
allocs | 内存分配情况的采样信息 | 可以用浏览器打开,但可读性不高 |
blocks | 阻塞操作情况的采样信息 | 可以用浏览器打开,但可读性不高 |
cmdline | 显示程序启动命令及参数 | 可以用浏览器打开,这里会显示 ./go-pprof-practice |
goroutine | 当前所有协程的堆栈信息 | 可以用浏览器打开,但可读性不高 |
heap | 堆上内存使用情况的采样信息 | 可以用浏览器打开,但可读性不高 |
mutex | 锁争用情况的采样信息 | 可以用浏览器打开,但可读性不高 |
profile | CPU 占用情况的采样信息 | 浏览器打开会下载文件 |
threadcreate | 系统线程创建情况的采样信息 | 可以用浏览器打开,但可读性不高 |
trace | 程序运行跟踪信息 | 浏览器打开会下载文件,本文不涉及,可另行参阅《深入浅出 Go trace》 |
具体后缀根据实际情况从上述类型中确定,这里以CPU的profile为例
- 调出交互式界面()
go tool pprof http://localhost:6060/debug/pprof/profile
-
top命令查看cpu使用情况
-
list定位使用量高的代码位置(在本例中就是Eat程序)
检查发现是这里的循环程序对CPU需求量较大,定位到代码的第24行 -
web命令可视化
注!针对其他的方法同样使用 top list web 大法进行错误定位。