go - 如何找出执行路径中的 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 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
推荐阅读
- c++ - Eigen RowVector 超出范围会产生“运行时检查失败 #2 - 变量 X 周围的堆栈已损坏”
- symfony4 - Sulu 中的其他页面类型
- ios - swift: MongoDB 领域没有同步到移动设备
- css - 如何将 flexbox 元素移动到另一行?
- java - java.lang.IllegalMonitorStateException (java selenium)
- c# - C# ASP.NET Core 2.1/Entity Framework:实体集合不保存
- php - PHP Laravel,如何检查字符串日期和时间是否不在过去
- javascript - 从浏览器控制台向 Instagram 图片添加评论(在本机 JavaScript 中)
- html - 环绕手机的引导导航栏
- node.js - eureka-js-client 为什么我不能为两个服务实例使用相同的主机名?