第一步:也是最重要的一步,就是下载谷歌浏览器!
第二步:下载 Graphviz http://graphviz.org/download/
安装后配置环境变量,再path里面添加安装目录!
第三步:添加以下测试代码 (添加 _”net/http/pprof” 不然不会有效果!)
具体看源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| 1 package main 2 import ( 3 "net/http" 4 "runtime" 5 "os" 6 "fmt" 7 "runtime/trace" 8 _"net/http/pprof" 9 "runtime/debug" 10 "time" 11 "sync" 12 ) 13 func main() { 14 15 go pprof() 16 17 var c sync.Map 18 for i:=0;i<100;i++{ 19 time.Sleep(time.Second*1) 20 go func(){ 21 for j:=0;j<1000000;j++{ 22 time.Sleep(time.Millisecond*20) 23 c.Store(fmt.Sprintf("%d",j),j) 24 fmt.Println(c.Load(fmt.Sprintf("%d",j))) 25 } 26 }() 27 } 28 time.Sleep(time.Second*20) 29 fmt.Scan() 30 } 31 32 func pprof(){ 33 go func() { 34 35 debug.SetGCPercent(-1) 36 37 http.HandleFunc("/start", traces) 38 39 http.HandleFunc("/stop", traceStop) 40 41 http.HandleFunc("/gc", gc) 42 43 http.ListenAndServe(":6060", nil) 44 }() 45 } 46 47 func gc(w http.ResponseWriter, r *http.Request) { 48 runtime.GC() 49 w.Write([]byte("StartGC")) 50 } 51 52 func traces(w http.ResponseWriter, r *http.Request){ 53 f, err := os.Create("trace.out") 54 if err != nil { 55 panic(err) 56 } 57 err = trace.Start(f) 58 if err != nil { 59 panic(err) 60 } 61 w.Write([]byte("TrancStart")) 62 fmt.Println("StartTrancs") 63 } 64 65 func traceStop(w http.ResponseWriter, r *http.Request){ 66 trace.Stop() 67 w.Write([]byte("TrancStop")) 68 fmt.Println("StopTrancs") 69 }
|
第四步:接下来就看图说话了。
程序运行后随便打开一个CMD 然后输入
1
| go tool pprof http://localhost:6060/debug/pprof/profile
|
需要等待分析时间,大约30秒,然后再输入
查看具体pprof的信息了
第五步:查看trace的信息,在谷歌浏览器中输入
然后等一会儿,再输入
当然期间也可以手动gc。在程序运行的地方自动生成一个文件
在cmd中输入 go tool trace trace.out(具体路径)
它会生成一个URL 地址,使用谷歌浏览器打开即可