这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
年后忙完开始补课!!!
性能分析工具pprof的性能简介
工作原理
工作原理从过程上来说包括两个部分:性能样本数据采集和样本数据分析。
1、性能样本数据采集
在性能样本数据采集过程中,pprof 搜集被分析程序在运行时的一系列的性能概要信息的采样数据,并根据产生的采样数据生成 pprof 可视化工具可以解析的数据格式。
2、性能样本数据分析
pprof 工具本身提供了命令行工具,可以对采集到的样本数据进行可视化和性能分析。
对于 Golang 程序来说,主要关注下几方面的性能指标:
CPU 使用情况
内存使用情况
导致阻塞(Block)的同步原语情况
goroutine 的使用情况
页面介绍
功能代码如下
func main() {
log.SetFlags(log.Lshortfile | log.LstdFlags)
log.SetOutput(os.Stdout)
runtime.GOMAXPROCS(1)
runtime.SetMutexProfileFraction(1)
runtime.SetBlockProfileRate(1)
go func() {
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)
}
}
简单的看一下main.go文件
运行pprof后的页面
页面展示的信息分别为:
点进去看看allocs:
pprof实战
排查实战
调用任务管理器看看pprof的cpu占用情况
可以说是相当的高
使用 go tool pprof 来排场一下:
go tool pprof http://localhost:6060/debug/pprof/profile
使用top命令来排查占用cpu较高的调用:
很明显,CPU 占用过高是 github.com/wolfogre/go-pprof-practice/animal/felidae/tiger.(*Tiger).Eat 造成的。
每列指标的含义:
课程案例问题:
回答:
list命令
根据指定的正则表达式查找代码行
web命令
内存排查
协程排查
top
list
锁排查
后面的命令改一下即可
阻塞排查
继续使用top list web
引用
本文一些内容来自:
原文链接:blog.csdn.net/luduoyuan/a…
课本:blog.wolfogre.com/posts/go-pp…
字节内部课:后端入门 - Go语言原理与实践