轻松入门Golang pprof实用不忽悠

作者: 大彬_一起学Golang | 来源:发表于2018-11-07 20:25 被阅读1次

网上已搜索golang pprof,资料不少,简明高效的一个没看到,这篇文章5步教你用会pprof获取cpu和内存prof。

第1步:安装易用的pprof

golang自带的prof包是runtime/pprof,这个是低级别的,需要你手动做一些设置等等周边工作,不利于我们快速上手,利用pprof帮助我们解决实际的问题。这里推荐davecheney封装的pprof,它可以1行代码,让你用上pprof,专心解决自己的代码问题,下载:

go get github.com/pkg/profile

第4步:安装graphviz

pprof生成的prof文件时二进制的,需要把这个二进制的文件转换为我们人类可读的,graphviz可以帮助我们把二进制的prof文件转换为图像。Mac安装:

brew install graphviz

其他系统安装参考这里Graphviz Download

第3步:修改你的main函数

只需要为hi.go增加这一行,defer profile.Start().Stop(),程序运行时,默认就会记录cpu数据:

package main

import (
    "fmt"
    "github.com/pkg/profile"
)

func main() {
    defer profile.Start().Stop()

    sl := makeSlice()
    fmt.Printf("sum = %d\n", sumSlice(sl))
}

func makeSlice() []int {
    sl := make([]int, 10000000)
    for idx := range sl {
        sl[idx] = idx
    }
    return sl
}

func sumSlice(sl []int) int {
    sum := 0
    for _, x := range sl {
        sum += x
    }
    return sum
}

第4步:编译运行你的函数

编译和执行hi.go

go build hi.go
./hi

应当看到类似的结果,它输出了生成的cpu.pprof的路径:

2018/11/07 19:47:21 profile: cpu profiling enabled, /var/folders/5g/rz16gqtx3nsdfs7k8sb80jth0000gn/T/profile046201825/cpu.pprof
sum = 49999995000000
2018/11/07 19:47:21 profile: cpu profiling disabled, /var/folders/5g/rz16gqtx3nsdfs7k8sb80jth0000gn/T/profile046201825/cpu.pprof

第5步:可视化prof

可视化有多种方式,可以转换为text、pdf、svg等等。text命令是

go tool pprof --text /path/to/yourbinary /var/path/to/cpu.pprof

结果是:

go tool pprof -text ./hi /var/folders/5g/rz16gqtx3nsdfs7k8sb80jth0000gn/T/profile046201825/cpu.pprof
File: hi
Type: cpu
Time: Nov 7, 2018 at 7:47pm (CST)
Duration: 202.18ms, Total samples = 50ms (24.73%)
Showing nodes accounting for 50ms, 100% of 50ms total
      flat  flat%   sum%        cum   cum%
      40ms 80.00% 80.00%       40ms 80.00%  main.makeSlice /Users/shitaibin/go/src/github.com/shitaibin/awesome/hi.go
      10ms 20.00%   100%       10ms 20.00%  main.sumSlice /Users/shitaibin/go/src/github.com/shitaibin/awesome/hi.go
         0     0%   100%       50ms   100%  main.main /Users/shitaibin/go/src/github.com/shitaibin/awesome/hi.go
         0     0%   100%       50ms   100%  runtime.main /usr/local/go/src/runtime/proc.go

还有pdf这种效果更好:

go tool pprof --pdf /path/to/yourbinary /var/path/to/cpu.pprof > cpu.pdf

例子:

go tool pprof -pdf ./hi /var/folders/5g/rz16gqtx3nsdfs7k8sb80jth0000gn/T/profile046201825/cpu.pprof > cpu.pdf

效果:

cpu pprof

5步已经结束,你已经学会使用cpu pprof了吗?

轻松获取内存ppfo

如果你掌握了cpu pprof,mem pprof轻而易举就能拿下,只需要改1行代码:

defer profile.Start(profile.MemProfile).Stop()

效果:

go tool pprof -pdf ./hi /var/folders/5g/rz16gqtx3nsdfs7k8sb80jth0000gn/T/profile986580758/mem.pprof > mem.pdf
mem pprof

相关文章

  • 轻松入门Golang pprof实用不忽悠

    网上已搜索golang pprof,资料不少,简明高效的一个没看到,这篇文章5步教你用会pprof获取cpu和内存...

  • golang性能优化之pprof及其火焰图

    1 pprof简介 golang代码的性能监控使用pprof包来做。pprof有两个包: runtime/ppro...

  • pprof接口隐藏/认证

    pprof是golang提供的性能分析工具,这里就不过多介绍了。 使用方式很简单,导入pprof包即可 pprof...

  • pprof 工具使用

    pprof golang pprof是golang的可视化和性能分析的工具。其提供了可视化的web页面,火焰图等更...

  • golang pprof

    go test -bench . -cpuprofile=cpu.outgo tool pprof cpu.out...

  • golang pprof

    基本路径:/debug/pprof/ 支持的分析类型: cpu(CPU Profiling) : ...

  • golang pprof 使用简介

    golang 的 pprof 是性能分析的神器,包括交互命令行和 UI 图像化的分析。主要来看看 pprof 支持...

  • Golang 使用pprof分析性能

    参考Golang 使用pprof分析goweb的性能问题 go的pprof可以用来对服务的性能进行检测,其中net...

  • Go每日精选(2019-06-27)

    1.Golang 大杀器之性能剖析 PProf 2.Kafka 集群 Golang 应用实例 3.高并发下如何缩短...

  • golang pprof使用

    代码 在浏览器使用 http://localhost:8888/debug/pprof/ 即可访问 查看profi...

网友评论

    本文标题:轻松入门Golang pprof实用不忽悠

    本文链接:https://www.haomeiwen.com/subject/clrbxqtx.html