前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go pprof 及 trace 完整操作指南 GC或性能分析 (windows平台linux平台皆可)

go pprof 及 trace 完整操作指南 GC或性能分析 (windows平台linux平台皆可)

作者头像
李海彬
发布2018-07-26 10:46:32
2.1K0
发布2018-07-26 10:46:32
举报
文章被收录于专栏:Golang语言社区Golang语言社区

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

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

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

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

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

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

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

具体看源码

代码语言:javascript
复制
 1package main
 2import (
 3   "net/http"
 4   "runtime"
 5   "os"
 6   "fmt"
 7   "runtime/trace"
 8   _"net/http/pprof"
 9   "runtime/debug"
10   "time"
11   "sync"
12)
13func 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分析器
32func 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
47func gc(w http.ResponseWriter, r *http.Request) {
48   runtime.GC()
49   w.Write([]byte("StartGC"))
50}
51//运行trace
52func 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
65func traceStop(w http.ResponseWriter, r *http.Request){
66   trace.Stop()
67   w.Write([]byte("TrancStop"))
68   fmt.Println("StopTrancs")
69}

第四步:接下来就可以享受了!!哈哈

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

代码语言:javascript
复制
go tool pprof  http://localhost:6060/debug/pprof/profile

然后等30秒就分析好了

然后再输入 web

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

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

然后等一会儿,再输入

当然期间也可以 手动gc

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一步:也是最重要的一步,就是下载谷歌浏览器!(之前一直卡这了)
  • 第二步:下载 Graphviz http://graphviz.org/download/
  • 安装后配置环境变量,再path里面添加安装目录!
  • 第三步:添加以下测试代码 (记得手动添加 _"net/http/pprof" 不然不会有效果!)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档