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)
1条答案
按热度按时间hwazgwia1#
在新的火焰图的颜色是由包,因为你的配置文件主要显示
runtime
包,这是单一的颜色,你看到的。我猜是因为睡眠调用的缘故,当你扫描goroutine的时候,你的主goroutine并没有被发现。你可以尝试用一些更繁忙的忙碌来替换它们(做一些浮点运算,计算PI等,在前面尽可能多地构建
0
的sha256等)。我个人现在更喜欢新的图表,因为当点击堆栈帧时,它会将多个调用站点分组,并让我看到所有调用者和下游事物的聚合。