zoukankan      html  css  js  c++  java
  • go 程序性能调优 pprof 的使用 (二)

    上一篇说了以命令行方式执行了pprof,这次我们学习以web方式运行pprof. 下面看个例子:

    var datas []string
    func main() {
       go func() {
          for  {
             log.Printf("len:%d",Add("gwyy"))
             time.Sleep(time.Second)
          }
       }()
       go func() {
          for  {
             Get()
             time.Sleep(time.Second)
          }
       }()
       _ = http.ListenAndServe(":6060",nil)
    }
    func Add(str string) int {
       data := []byte(str)
       datas = append(datas,string(data))
       return len(datas)
    }
    func Get() {
       res,_ :=http.Get("https://www.baidu.com/")
       defer res.Body.Close()
       body,_ := ioutil.ReadAll(res.Body)
       log.Println(body)
    }
    

      

    然后执行命令:

    wget http://127.0.0.1:6060/debug/pprof/profile     
    

      

    默认需要等待30秒,执行完毕后当前目录下有个采集profile文件,针对可视化界面,可以进行下一步分析的方法有两种:
     
    方法1 (推荐)该命令将在指定端口号运行一个PProf分析用的页面

    go tool pprof -http=:6001 profile 
    

      

    方法2 通过web命令将profile文件以svg的文件格式写入图形,然后在web浏览器中将其打开

    PS D:> go tool pprof profile                                                                                           
    Type: cpu
    Time: Oct 13, 2020 at 12:49am (CST)
    Duration: 30s, Total samples = 20ms (0.067%)
    Entering interactive mode (type "help" for commands, "o" for options)
    (pprof) web
    (pprof)   
    

      如果出现错误 “Could not execute dot; may need to install graphviz” 那么要安装 graphviz组件

    解析内容

    通过PProf提供的可视化界面,我们能够更方便、更直观的看到go应用程序的调用链和使用情况等,另外在View菜单栏,PProf还支持多种分析方式切换

    Top视图如图:

    该视图与命令行下面的 top 命令作用和含义一样
     

    Graph视图如图:

    该视图展示的是整体的函数调用流程,框越大,线越粗,框颜色越鲜艳(红色),代表它占用时间越久,开销越大,相反框越小,颜色越浅,框颜色越淡,代表开销越小
     

    Peek视图如图:

    此图与top视图相比,增加了所属上下文信息的展示,既函数的输出调用者和被调用者
     

    Source 视图如图:

    该视图主要增加了面向源代码的追中和分析,可以看到其开销主要消耗在哪里
     

    Flame Graph 视图如图

    Flame Graph (火焰图)是动态的,调用顺序由上而下,(A->B->C->D) 每一快代表一个函数,颜色越鲜艳(红),区块越大,代表占CPU的时间越长,同时它还支持点击块进行深入分析。

    这样就可以根据不同函数的多维度进行分析了,能够更好的观察其流转并发现问题。

  • 相关阅读:
    Wannafly Camp 2020 Day 2C 纳新一百的石子游戏
    [CF653F] Paper task
    [CCPC2019 哈尔滨] L. LRU Algorithm
    [CCPC2019 哈尔滨] A. Artful Paintings
    [BZOJ4310] 跳蚤
    [BZOJ3277/BZOJ3473] 串
    bugku数字验证绕过正则
    sublime在搜索的时候排除js文件
    bugku逗号过滤注入
    SQL注入之逗号拦截绕过
  • 原文地址:https://www.cnblogs.com/gwyy/p/13807374.html
Copyright © 2011-2022 走看看