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 fileName
浏览器自动跳转至该页面

点击View trace后

什么时候go tool trace不合适

当然,go tool trace不能解决一切问题。 如果您想跟踪运行缓慢的函数,或者找到大部分CPU时间花费在哪里,这个工具就是不合适的。 为此,您应该使用go tool pprof,它可以显示在每个函数中花费的CPU时间的百分比。 go tool trace更适合于找出程序在一段时间内正在做什么,而不是总体上的开销。 此外,还有“view trace”链接提供的其他可视化功能,这些对于诊断争用问题特别有用。 了解您的程序在理论上的表现(使用老式Big-O分析)也是无可替代的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值