Google 中的“新”火焰图
pprof
在我的机器(Mac OS 10)上都是粉红色的。这应该发生吗?它不像旧的火焰图那么好,所以我想知道我这边是否有什么配置不正确。
这是我使用的 Go 程序示例:
package main
import (
"os"
"runtime/pprof"
"time"
)
func main() {
// Create CPU profile file
f, err := os.Create("cpu.pprof")
if err != nil {
panic(err)
}
defer f.Close()
// Start CPU profiling
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
// Simulated workload
for i := 0; i < 100; i++ {
Foo()
Bar()
}
}
func Foo() {
time.Sleep(50 * time.Millisecond)
}
func Bar() {
time.Sleep(100 * time.Millisecond)
}
我运行了程序并在输出上启动了
pprof
服务器:
go run main.go
go tool pprof -http=:8080 cpu.pprof
左上角的下拉菜单允许我选择“火焰图”和“火焰图(新)”。前者是我喜欢的类型:
后者不太好:
版本等:
$ go version
go version go1.21.1 darwin/arm64
$ dot -V
dot - graphviz version 9.0.0 (20230911.1827)
新火焰图中的颜色由包装决定,因为您的配置文件主要显示
runtime
包装,这就是您看到的单色。
我猜由于睡眠调用,在扫描 Goroutine 的痕迹时看不到你的主 Goroutine。您可以尝试用一些更繁忙的循环替换它们(做一些浮动数学,计算 PI 等,在前面构建尽可能多的
0
等)。
我个人现在更喜欢新的图表,因为它在单击堆栈框架时将多个调用站点分组,并让我看到聚合的所有调用者和下游事物。