Go语言 奇怪的粉红色火焰图与谷歌pprof

e5njpo68  于 2023-10-14  发布在  Go
关注(0)|答案(1)|浏览(142)

Google pprof中的“新”火焰图在我的机器(Mac OS 10)上是统一的粉红色。这是正常的吗它不像旧的火焰图那么好,所以我想知道是否有什么东西在我这边没有配置好。
下面是我使用的Go程序示例:

  1. package main
  2. import (
  3. "os"
  4. "runtime/pprof"
  5. "time"
  6. )
  7. func main() {
  8. // Create CPU profile file
  9. f, err := os.Create("cpu.pprof")
  10. if err != nil {
  11. panic(err)
  12. }
  13. defer f.Close()
  14. // Start CPU profiling
  15. pprof.StartCPUProfile(f)
  16. defer pprof.StopCPUProfile()
  17. // Simulated workload
  18. for i := 0; i < 100; i++ {
  19. Foo()
  20. Bar()
  21. }
  22. }
  23. func Foo() {
  24. time.Sleep(50 * time.Millisecond)
  25. }
  26. func Bar() {
  27. time.Sleep(100 * time.Millisecond)
  28. }

我运行了这个程序,并在输出上启动了一个pprof服务器:

  1. go run main.go
  2. go tool pprof -http=:8080 cpu.pprof

左上角的菜单允许我选择“火焰图”和“火焰图(新)"。前者是我喜欢的类型:

后者并不那么好:

版本等:

  1. $ go version
  2. go version go1.21.1 darwin/arm64
  3. $ dot -V
  4. dot - graphviz version 9.0.0 (20230911.1827)
hwazgwia

hwazgwia1#

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

相关问题