执行追踪器,跟踪器捕获各种各样的时间,如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然后我们可以对一项内容进行查看
网友评论