golang 大杀器之性能分析工具 PProf

  1. 前言
  2. 工具介绍
  3. HTTP Server
    1. 简单的demo
    2. 分析
      1. 通过Web界面
      2. 通过交互式终端
      3. PProf 可视化界面

前言

  • 写了几万行代码,提了几千个PR,上线部署之后发现
  • CPU占用高?内存占用高?WTF
  • 这个时候就需要加上性能分析工具,快速定位问题所在

工具介绍

  • 想要进行性能优化,首先瞩目在 Go 自身提供的工具链来作为分析依据,涉及如下:
    • net/http/pprof:采集 HTTP Server 的运行时数据进行分析
    • runtime/pprof:采集程序(非 Server)的运行数据进行分析
  • 因为我主要是做服务器开发,因此我只将来第一种

HTTP Server

简单的demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main

import (
"log"
"net/http"
_ "net/http/pprof"
)

func test(str string) string {
strBytes := []byte(str)
for i := 0; i < 10; i++ {
strBytes = append(strBytes, []byte(str)...)
}
return string(strBytes)
}

func main() {
go func() {
for {
log.Println(test("this is a test string, do something to use CPU & MEM\n"))
}
}()

http.ListenAndServe(":6060", nil)
}
  • 运行这个文件,你的 HTTP 服务会多出 /debug/pprof 的 endpoint 可用于观察应用程序的情况

分析

通过Web界面

  • 访问 http://127.0.0.1:6060/debug/pprof/, 查看你的 HTTP Server 的运行情况
    pprof
  • 下面有对每一个采集的解释,我来提及几个重要的指标
    • profile:CPU使用情况的采集,默认进行30s的 CPU Profiling,得到一个用于分析的profile文件,如何分析后文会继续叙述。
    • goroutine:goroutine分析,可以看出 goroutine 的总量以及每个 goroutine 的具体执行代码
    • mutex:导致互斥锁的竞争持有者的堆栈跟踪

通过交互式终端

PProf 可视化界面

  • 在第一中分析方法通过Web界面下载到的文件可以通过可视化的界面来进行分析
  • 或者在第二种分析方法中,进入交互界面之后,输入web也是可以进入图形界面的哦
  • 具体的方法如下所示:
    1
    go tool pprof -http=:8080 cpu.prof
    web
  • 这样即可在 localhost:8080 中即可访问
    web-graph
  • 如果出现 Could not execute dot; may need to install graphviz.,就是提示你要安装 graphviz

欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 qinhan_shu@163.com

文章标题:golang 大杀器之性能分析工具 PProf

本文作者:QinHan

发布时间:2019-08-30, 14:48:36

最后更新:2020-02-20, 05:42:12

原始链接:https://qinhan.site/2019/08/30/go-pprof/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏