Go调优神器trace介绍
转自: https://studygolang.com/articles/9693
go tool trace 功能
go tool trace可以显示大量的信息,所以从哪里开始是个问题。 我们首先简要介绍使用界面,然后我们将介绍如何查找具体问题。go tool traceUI是一个Web应用程序。
这里有一些你可以从这个追踪中找到的有价值的信息:
- 这个程序运行多长时间?
- 有多少goroutines运行872微秒?
- 该进程何时第一次升级到使用三个OS线程?
- 什么时候主要调用qSortPar?
- 是什么导致额外的过程(1,2和3)开始工作?
- proc#2什么时候停止?
go tool trace 使用
我们必须调整程序以将运行时事件写入二进制文件。 这涉及从标准库导入runtime/trace,并添加几行样板代码。
以下是需要复制粘贴的代码:
package main
import (
"os"
"runtime/trace"
)
func main() {
f, err := os.Create("trace.out")
if err != nil {
panic(err)
}
defer f.Close()
err = trace.Start(f)
if err != nil {
panic(err)
}
defer trace.Stop()
// Your program here
// My Example
for i := 0; i < 10; i++ {
fmt.Printf("i: %d\n", i)
time.Sleep(1 * time.Second)
}
return
}
这将使程序以二进制格式在文件trace.out中写入事件数据。 然后可以运行go tool trace trace.out。 这将解析跟踪文件,并使用可视化程序打开浏览器。 该命令还将启动服务器,并使用跟踪数据来响应可视化操作,服务器端口号随机。 在浏览器中加载初始页面后,单击“View trace”,这将加载跟踪查看器。
什么时候go tool trace不合适
当然,go tool trace不能解决一切问题。 如果您想跟踪运行缓慢的函数,或者找到大部分CPU时间花费在哪里,这个工具就是不合适的。 为此,您应该使用go tool pprof,它可以显示在每个函数中花费的CPU时间的百分比。 go tool trace更适合于找出程序在一段时间内正在做什么,而不是总体上的开销。 此外,还有“view trace”链接提供的其他可视化功能,这些对于诊断争用问题特别有用。 了解您的程序在理论上的表现(使用老式Big-O分析)也是无可替代的。