我想通过go blog中的示例来了解Go Pro文件管理器。我不确定我做错了什么。但我的profiled生成的输出显示0个样本。这很奇怪。
rahul@g3ck0:~/programs/go$ go tool pprof parallel cpuprofile
Welcome to pprof! For help, type 'help'.
(pprof) top5
Total: 0 samples
以下是我的代码:
package main
import (
"fmt"
"os/exec"
"sync"
"strings"
"runtime/pprof"
"os"
)
func exe_cmd(cmd string, wg *sync.WaitGroup) {
out, err := exec.Command(cmd).Output()
if err != nil {
fmt.Println("error occured")
fmt.Printf("%s", err)
}
fmt.Printf("%s", out)
wg.Done()
}
func main() {
f, _ := os.Create("cpuprofile")
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
cmd := "echo newline >> blah.txt"
parts := strings.Fields(cmd)
head := parts[0]
parts = parts[1:len(parts)]
out, err := exec.Command(head,parts...).Output()
if err != nil {
fmt.Println("error occured")
fmt.Printf("%s", err)
}
fmt.Printf("%s", out)
}
答案 0 :(得分:2)
您的配置文件程序运行时间不足以让分析器获取任何分析样本。 基本上,探查器会定期查看程序的状态(执行哪些代码,该功能是什么,......)。如果程序终止的速度比查找状态的例程更快,那么就不会对状态进行采样,因此最后没有要查看的样本。
这就是你发生的事情。
一种解决方案是将探查器的sample rate设置为更高的值,反之亦然 是让你的程序实际上做一些需要更长时间的事情。例如:
f, _ := os.Create("cpuprofile")
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
for i := 0; i < 10; i++ {
time.Sleep(1 * time.Second)
}
或者,当试图弄清楚代码的孤立部分出了什么问题时, 你可以写一个benchmark并描述那个基准。