鉴于以下玩具代码,我希望能够运行
go tool pprof cpu.prof
并获取有关waster1和waster2的有用信息,但是当我在pprof中运行top时,我得到的只是:
Showing nodes accounting for 0, 0% of 0 total
flat flat% sum% cum cum%
问题可能是我使用WSL在Windows 10上运行Ubuntu。
以下是我正在使用的代码:
package main
import (
"fmt"
"log"
"os"
"runtime/pprof"
)
func waster2() int {
j := 0;
for i := 0; i < 100; i++ {
j += waster1()
}
return j
}
func waster1() int {
j := 0;
for i := 0; i < 10000; i++ {
j++
}
return j
}
func main() {
f, err := os.Create("cpu.prof")
if err != nil {
log.Fatal("could not create CPU profile: ", err)
}
if err := pprof.StartCPUProfile(f); err != nil {
log.Fatal("could not start CPU profile: ", err)
}
defer pprof.StopCPUProfile()
j := waster2()
fmt.Println(j)
}
答案 0 :(得分:3)
问题是您正在使用WSL在Windows 10上运行Ubuntu。
答案 1 :(得分:1)
在Windows上运行也不会在探查器中生成任何样本。来自go博客的以下article声明如下:
When CPU profiling is enabled, the Go program stops about 100 times per second and
records a sample consisting of the program counters on the currently executing
goroutine's stack.
运行代码的时间少于2毫秒,因此不允许分析器采样。将循环次数从100增加到10000,然后您应该在输出中看到一些样本。
另请注意,请务必关闭文件f
。像这样:
if err != nil {
log.Fatal("could not create CPU profile: ", err)
}
defer f.Close()