go pprof trace完整操作

第一步:也是最重要的一步,就是下载谷歌浏览器!

第二步:下载 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 //运行pprof分析器
32 func pprof(){
33 go func() {
34 //关闭GC
35 debug.SetGCPercent(-1)
36 //运行trace
37 http.HandleFunc("/start", traces)
38 //停止trace
39 http.HandleFunc("/stop", traceStop)
40 //手动GC
41 http.HandleFunc("/gc", gc)
42 //网站开始监听
43 http.ListenAndServe(":6060", nil)
44 }()
45 }
46 //手动GC
47 func gc(w http.ResponseWriter, r *http.Request) {
48 runtime.GC()
49 w.Write([]byte("StartGC"))
50 }
51 //运行trace
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 //停止trace
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秒,然后再输入

1
web

查看具体pprof的信息了

第五步:查看trace的信息,在谷歌浏览器中输入

然后等一会儿,再输入

当然期间也可以手动gc。在程序运行的地方自动生成一个文件

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

它会生成一个URL 地址,使用谷歌浏览器打开即可