go-runtime/trace

2018-12-25  本文已影响16人  酷走天涯

执行追踪器,跟踪器捕获各种各样的时间,如go协程的创建、阻塞、解锁,syscall 进入、退出、阻塞、GC相关时间,堆大小变化,处理器启动、停止等,将这些事件写入到io.writor中,大多数时间都会捕获到精确的纳秒精度时间戳

如何创建go执行追踪器

func Start(w io.Writer) error

未当前的程序启用追踪器,追踪的数据将会写入w 中,不能重复创建

如何停止追踪器

func Stop()

停止当前的追踪器,当所有追踪完全写入w后,才返回

如何查看追踪器记录的数据

go tool trace xxxx

下面我们看一个例子

package main

import (
    "os"
    "runtime/trace"
    "time"
)

func main() {
  file,_ := os.Create("/Users/xujie/go/src/awesomeProject/main/trace")
  trace.Start(file)
  defer trace.Stop()
  data := make(chan int)
  go test(data)
  <- data
}
func test(s chan int){
    time.Sleep(time.Second)
    go test2(s)
}
func test2(s chan int){
    time.Sleep(time.Second)
    s <- 3
}
image.png

运行代码后,就在main包中生成了一个文件,我们使用下面的命令查看这个文件的内容

go tool trace /Users/xujie/go/src/awesomeProject/main/trace

系统会自动启动浏览器

image.png

然后我们可以对一项内容进行查看

上一篇下一篇

猜你喜欢

热点阅读