使用场景:
1 想要查看接口延时性偏高
2 深入了解协程具体如何运营的详细信息(运行时长,或者什么原因导致了协程运行受阻)
可以使用 trace 功能,程序便会对下面的一系列事件进行详细记录,并且会依据所搜集到的这些信息,生成能够以可视化方式查看的 trace 视图
1 协程的创建过程、开始运行的时刻以及结束运行的时间点。
2 协程由于系统调用、通道操作、锁的使用等情况而出现被阻塞的现象。
3 网络 IO 相关的操作情况。
4 垃圾收集的相关活动情况。
Go
import (
"net/http"
_ "net/http/pprof"
)
func main() {
_ := http.ListenAndServe(":8000", nil)
}
执行:curl "http://localhost:8000/debug/pprof/trace?seconds=30" > trace.out
如果不能使用http等进行访问 我们可以在程序内部运行
Go
import (
"runtime/trace"
)
func main() {
// 创建trace文件
f, _ := os.Create("trace.out")
defer f.Close()
if err := trace.Start(f); err != nil {
return
}
defer trace.Stop()
// 执行
}
执行: go tool trace trace.out
1 分析协程阻塞情况
2 处理器是否得到充分使用
协程运行时间、同步阻塞时间、系统调用阻塞时间、调度延迟时间、查看处理器的使用状况、垃圾回收(GC)占比