乐趣区

关于go:go性能工具pprof

Go 语言自带的 pprof 库就能够分析程序的运行状况,并且提供可视化的性能。它蕴含两个相干的库:

  1. runtime/pprof
    对于只跑一次的程序,例如每天只跑一次的离线预处理程序,调用 pprof 包提供的函数,手动开启性能数据采集。
  2. net/http/pprof
    对于在线服务,对于一个 HTTP Server,拜访 pprof 提供的 HTTP 接口,取得性能数据。当然,实际上这里底层也是调用的 runtime/pprof 提供的函数,封装成接口对外提供网络拜访。

因为本人用 gin 比拟多,所以应用 github.com/gin-contrib/pprof,其实外部也就是下面两个库。应用非常简单。

var debugHttp *http.Server

func runPPROF() {g := gin.New()
    g.Use(gin.Recovery())
    g.Use(gin.Logger())

    pprof.Register(g)

    // 应用 9000 端口开启 http 服务
    debugHttp = &http.Server{
        Addr:    ":9000",
        Handler: g,
    }
    debugHttp.ListenAndServe()}

开启之后能够 web 拜访 http://127.0.0.1:9000/debug/p… 能够查看实时数据,

当然也能够查看某个时间段的性能状况:

// 监听 60s 性能状况,默认进入命令行
go tool pprof http://127.0.0.1:9000/debug/pprof/profile\?seconds\=60
// 本地启动 http 服务查看,须要装 graphviz 插件
go tool pprof -http=:8080  ~/pprof/pprof.go.samples.cpu.032.pb.gz

能够切换看占用最高的,还有火焰图等等,相当好用,个别性能瓶颈就在占用比拟多的。

PS: 有时候线上可能没有开启,也能够应用 perf 去 debug 查看占用资源比拟多的。

// 19323 端口号
perf record -p 19323
perf report

首发于 blog https://github.13sai.com/2022/01/29/385/

退出移动版