pprof 和 trace 这东西可以分析GC具体的瓶颈位置!!以及每一个线程具体什么时候运行的!!反正各种好处!

之前网上 大家各种抄袭,复制,我相信没有几个人真正玩过这玩意儿,因为项目需要,最后我也是在国外网站上才找到真正使用方法!!下面介绍一下。

我设置了一个pprof 以及 trace 联合使用的方案!

第一步:也是最重要的一步,就是下载谷歌浏览器!(之前一直卡这了)



第二步:下载 Graphviz   http://graphviz.org/download/ <http://graphviz.org/download/>
 

安装后配置环境变量,再path里面添加安装目录!







第三步:添加以下测试代码 (记得手动添加   _"net/http/pprof"  不然不会有效果!)

具体看源码


package main import ( "net/http" "runtime" "os" "fmt" "runtime/trace" _
"net/http/pprof" "runtime/debug" "time" "sync" ) func main() { //开启强大的分析器 go
pprof() //以下是运行测试(也可以贴你自己的)代码 var c sync.Map for i:=0;i<100;i++{ time.Sleep
(time.Second*1) go func(){ for j:=0;j<1000000;j++{ time.Sleep(time.Millisecond*
20) c.Store(fmt.Sprintf("%d",j),j) fmt.Println(c.Load(fmt.Sprintf("%d",j))) }
}() } time.Sleep(time.Second*20) fmt.Scan() } //运行pprof分析器 func pprof(){ go func
() {//关闭GC debug.SetGCPercent(-1) //运行trace http.HandleFunc("/start", traces)
//停止trace http.HandleFunc("/stop", traceStop) //手动GC http.HandleFunc("/gc", gc)
//网站开始监听 http.ListenAndServe(":6060", nil) }() } //手动GC func gc(w
http.ResponseWriter, r*http.Request) { runtime.GC() w.Write([]byte("StartGC")) }
//运行tracefunc traces(w http.ResponseWriter, r *http.Request){ f, err := os.
Create("trace.out") if err != nil { panic(err) } err = trace.Start(f) if err !=
nil{ panic(err) } w.Write([]byte("TrancStart")) fmt.Println("StartTrancs") }
//停止tracefunc traceStop(w http.ResponseWriter, r *http.Request){ trace.Stop() w.
Write([]byte("TrancStop")) fmt.Println("StopTrancs") }
第四步:接下来就可以享受了!!哈哈

程序运行后随便打开一个CMD 然后输入


go tool pprof http://localhost:6060/debug/pprof/profile
然后等30秒就分析好了

然后再输入 web

就可以查看具体pprof的信息了







第五步:如果想看trace的信息 只需要再谷歌浏览器中输入





然后等一会儿,再输入



当然期间也可以 手动gc

再然后 程序运行的地方自动生成一个文件 




在cmd中输入 go tool trace    trace.out(具体路径)




它会生成一个路径 一定要谷歌浏览器






友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信