首页 > 解决方案 > 如何找出执行路径中的 time.Sleep()?

问题描述

试图找出执行路径中的 time.Sleep() 调用。

为了简化问题,请考虑下面的代码。

func BenchmarkSleep(b *testing.B) {
    for i:=0; i < b.N; i++ {
        time.Sleep(time.Millisecond * 10)
    }
}

我试图分析(cpu、block、mutex)代码并希望time.Sleep在配置文件中看到示例。

我应该怎么办。

标签: go

解决方案


你有没有尝试过:

go test -trace trace.out

其次是:

go tool trace trace.out

...在浏览器中查看它?

然后,您可以从跟踪中生成类似 pprof 的配置文件:

go tool trace -pprof=TYPE trace.out > TYPE.pprof

支持的配置文件类型有:

  • net:网络阻止配置文件
  • sync:同步阻塞配置文件
  • 系统调用:系统调用阻塞配置文件
  • sched:调度程序延迟配置文件

并查看:

go tool pprof TYPE.pprof

更普遍...

跟踪包:https ://golang.org/pkg/runtime/trace/

可以配合trace工具使用:https ://golang.org/cmd/trace/

要获得诊断和可视化分析数据:https ://golang.org/doc/diagnostics.html


推荐阅读