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

原创 2018年04月16日 11:25:42

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

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

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

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

第二步:下载 Graphviz   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"))
}

//运行trace
func 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")
}

//停止trace
func 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(具体路径)


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



[golang]pprof性能分析工具

1. 关于pprofpprof是golang程序一个性能分析的工具,可以查看堆栈、cpu信息等。2. 源码示例package mainimport ( "flag" "log" ...
  • moxiaomomo
  • moxiaomomo
  • 2017年08月11日 14:02
  • 2842

Golang 使用pprof分析goweb的性能问题

go的pprof可以用来对服务的性能进行检测,其中net/http/pprof包用来检测web服务器的相关的性能的分析,包括goroutine的数量,heap的大小问题。 简单使用 pac...
  • suiban7403
  • suiban7403
  • 2018年01月23日 21:06
  • 83

使用golang的pprof包对程序进行性能分析

golang提供pprof包,可以监控golang程序的堆栈,cpu的耗时等性能信息。下边就说一下这个pprof包的使用。 1,首先是引入,在两个地方可以引入: “net/http/pprof” ...
  • sxs_smile
  • sxs_smile
  • 2016年12月23日 13:45
  • 3465

Go程序性能分析pprof

参考: http://blog.golang.org/profiling-go-programs http://google-perftools.googlecode.com/svn/trunk/do...
  • yhcharles
  • yhcharles
  • 2013年11月19日 11:35
  • 12801

Golang性能调优(go-torch, go tool pprof)

Go语言已经为开发者内置配套了很多性能调优监控的好工具和方法,这大大提升了我们profile分析的效率。此外本文还将重点介绍和推荐uber开源的go-torch,其生成的火焰图更方便更直观的帮我们进行...
  • WaltonWang
  • WaltonWang
  • 2017年01月04日 15:27
  • 18109

为golang程序使用pprof远程查看httpserver运行堆栈,cpu耗时等信息

pprof是个神马玩意儿? pprof - manual page for pprof (part of gperftools) 是gperftools工具的一部分 gperftools又是啥?...
  • chenbaoke
  • chenbaoke
  • 2015年11月26日 17:05
  • 2362

[转]Go程序GC优化经验分享

作者:达达来源:http://1234n.com/?post/yzsrwa最近一段时间对《仙侠道》的服务端进行了一系列针对GC的调优,这里跟各位分享一下调优的经验。游戏第一次上线的时候,大部分精力都投...
  • heiyeshuwu
  • heiyeshuwu
  • 2013年12月25日 16:28
  • 10909

获得性能大幅提升的go程序优化实践,火焰图使用

先把结论列在前面: 1.Golang的性能可以做到非常好,但是一些native包的性能很可能会拖后腿,比如regexp和encoding/json。如果在性能要求较高的场合使用,要根据实际情况做相应...
  • a64180190
  • a64180190
  • 2017年08月01日 14:26
  • 1553

【golang】调优工具 pprof

前言 Golang 提供了 pprof 包(runtime/pprof)用lai输出运行时的 profiling 数据,这些数据可被  pprof 工具或者 go tool pprof 使用。通常...
  • zhonglinzhang
  • zhonglinzhang
  • 2017年05月05日 10:18
  • 3224

go学习(九)——Go tool pprof之runtime/pprof 的使用

测试环境:centos7 go1.9 go1.6 gvmv1.0.22 Go 中监控代码性能的有两个包: net/http/pprofruntime/pprof 这两个包都是可以监控代码性能...
  • qq_21794823
  • qq_21794823
  • 2017年09月20日 18:11
  • 6259
收藏助手
不良信息举报
您举报文章:go pprof 及 trace 完整操作指南 GC或性能分析 (windows平台linux平台皆可)
举报原因:
原因补充:

(最多只允许输入30个字)