美文网首页
go-runtime/trace

go-runtime/trace

作者: 酷走天涯 | 来源:发表于2018-12-25 09:25 被阅读16次

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

    • 如何创建go执行追踪器
    • 如何停止追踪器
    • 如何查看追踪器记录的数据

    如何创建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

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

    相关文章

      网友评论

          本文标题:go-runtime/trace

          本文链接:https://www.haomeiwen.com/subject/kujanftx.html