第八章性能优化中,如何深入探究pprof工具?

2026-06-11 11:381阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1161个文字,预计阅读时间需要5分钟。

第八章性能优化中,如何深入探究pprof工具?

pprof基本操作,上次博客有记录,这里进一步研究pprof。接下来开始今天的学习内容。

今天研究内容计划如下:

1. pprof扩展 a. 在单元测试testing.B中测试程序性能 b. 在web项目中应用pprof

pprof的基本操作, 上次博客有记录, 这里进一步研究pprof

接下来开始今天的学习内容. 计划今天研究以下几个部分的内容

1. pprof扩展

  a. 在单元测试testing.B中测试检测程序的性能

  b. web项目中检测程序的性能

2. pprof的使用, 以及如何看生成的svg图.

3. 使用pprof分析近期做过的一个beego项目​

4. 调研pprof是否能够使用在生成环境.

5. 研究testing.T, testing.B testing.TB testing.N的区别​


一. pprof扩展

Go语言自带了强大的性能测试工具pprof,位于 net/www.baidu.com", nil)
f(response, request)
//读取reponse返回的body
b, _ := ioutil.ReadAll(response.Body)
body := strings.Trim(string(b), "\n")
if code != response.Code || message != body {
t.Errorf("except--code: %d, message: %s \n actual--code:%d, message:%s",
code, message, response.Code, body)
}
}
}

第二步: 进入到文件目录, 在命令行执行 go test -bench . -cpuprofile cpu.out 性能测试cpu的消耗情况

go test -bench . -cpuprofile cpu.out

第三步: 执行pprof分析

go tool pprof cpu.out

第四步: 输入web, 会生成一个svg的文件, 然后使用浏览器查看视图.


从图中可以看出每一步花费的时间大概是多少. 其中哪一个步骤花费的时间最长. 然后我们就可以针对其进行优化了

备注: 要想以web视图的方式查看上述结果, 需要下载graphviz, 下载方式参考的第四点, 附截图

2. 查看web服务的性能

第一步: import 增加net/localhost:8888/debug/profile, 这是会看到如下页面

这个页面分为两部分. 第一部分是当前服务的使用情况. 第二部分, 对命令的解析

使用情况截图如下

Count 表示当前服务使用数, 比如2, 是消耗内存的进程数. 21表示线程创建数, 2 表示历史数据. 等等

Profile 是性能指标名

命令说明如下:

  • allocs:过去所有内存分配的样本
  • block:堆栈导致对原始同步的阻塞
  • cmline:当前程序的命令行调用
  • goroutine:当前所有goroutine的堆栈跟踪
  • heap:活动对象内存分配的采样。您可以指定gc GET参数以在获取堆样本之前运行GC。
  • mutex:竞争互斥持有人的堆栈痕迹
  • profile:CPU配置文件。您可以在GET参数中指定持续时间。获取概要文件后,请使用go tool pprof命令调查文件。
  • threadcreate:导致创建新OS线程的堆栈跟踪
  • trace:当前程序执行的痕迹。您可以在GET参数中指定持续时间。获取跟踪文件后,使用go工具trace命令调查跟踪。

第四步: 通过Graphviz, 查看heap

从图中看, cpu的使用是0, heap的使用是2, 所以, 我们查看heap.

go tool pprof 127.0.0.1:8888/debug/pprof/heap

接下来我们可以通过help 查看pprof都有哪些命令. 常用的命令有. tree, top, web

我们用tree查看内存的使用情况

还可以使用top查看最消耗内存的地方

接下来还是使用web查看视图

视图更加直观, 哪一步消耗了多少内存

第五步: 模拟并发, 测试性能

这样的程序都是刚刚运行, 所以内存消耗, cpu消耗都比较少. 接下来我们模拟大量请求, 试一试性能如何

1. 下载一个模拟github.com/wg/wrk.git​​

在github上也有这个工具的介绍,

git clonegithub.com/wg/wrk.git
cd wrk
make

备注: 整个操作参考github上的说明即可.

2. 安装好wrk以后, 模拟批量请求

./wrk -c400 -t8 -d5m localhost:8899/v1/user/login

我模拟的是批量登录, 参数含义如下

  • -c400:我们有400个连接可以保持打开状态
  • ​​-t8​​:意味着我们使用8个线程来构建请求
  • ​​-d5m​​表示测试时间将持续5分钟

3. 在浏览器输入

localhost:8899/debug/pprof/

查看使用情况

4. awk执行完以后, 查看执行结果汇总

5. 接下来用go tool pprof 查看 heap

go tool pprof -alloc_space/-inuse_space localhost:8899/debug/pprof/heap-alloc_space: 过去使用的内存数据-inuse_space: 正在使用的内存数据

返回的视图





方框越大, 表示内存消耗越多.

参考文献:

1.​​www.jianshu.com/p/aa9b148e90e5​​

第八章性能优化中,如何深入探究pprof工具?



本文共计1161个文字,预计阅读时间需要5分钟。

第八章性能优化中,如何深入探究pprof工具?

pprof基本操作,上次博客有记录,这里进一步研究pprof。接下来开始今天的学习内容。

今天研究内容计划如下:

1. pprof扩展 a. 在单元测试testing.B中测试程序性能 b. 在web项目中应用pprof

pprof的基本操作, 上次博客有记录, 这里进一步研究pprof

接下来开始今天的学习内容. 计划今天研究以下几个部分的内容

1. pprof扩展

  a. 在单元测试testing.B中测试检测程序的性能

  b. web项目中检测程序的性能

2. pprof的使用, 以及如何看生成的svg图.

3. 使用pprof分析近期做过的一个beego项目​

4. 调研pprof是否能够使用在生成环境.

5. 研究testing.T, testing.B testing.TB testing.N的区别​


一. pprof扩展

Go语言自带了强大的性能测试工具pprof,位于 net/www.baidu.com", nil)
f(response, request)
//读取reponse返回的body
b, _ := ioutil.ReadAll(response.Body)
body := strings.Trim(string(b), "\n")
if code != response.Code || message != body {
t.Errorf("except--code: %d, message: %s \n actual--code:%d, message:%s",
code, message, response.Code, body)
}
}
}

第二步: 进入到文件目录, 在命令行执行 go test -bench . -cpuprofile cpu.out 性能测试cpu的消耗情况

go test -bench . -cpuprofile cpu.out

第三步: 执行pprof分析

go tool pprof cpu.out

第四步: 输入web, 会生成一个svg的文件, 然后使用浏览器查看视图.


从图中可以看出每一步花费的时间大概是多少. 其中哪一个步骤花费的时间最长. 然后我们就可以针对其进行优化了

备注: 要想以web视图的方式查看上述结果, 需要下载graphviz, 下载方式参考的第四点, 附截图

2. 查看web服务的性能

第一步: import 增加net/localhost:8888/debug/profile, 这是会看到如下页面

这个页面分为两部分. 第一部分是当前服务的使用情况. 第二部分, 对命令的解析

使用情况截图如下

Count 表示当前服务使用数, 比如2, 是消耗内存的进程数. 21表示线程创建数, 2 表示历史数据. 等等

Profile 是性能指标名

命令说明如下:

  • allocs:过去所有内存分配的样本
  • block:堆栈导致对原始同步的阻塞
  • cmline:当前程序的命令行调用
  • goroutine:当前所有goroutine的堆栈跟踪
  • heap:活动对象内存分配的采样。您可以指定gc GET参数以在获取堆样本之前运行GC。
  • mutex:竞争互斥持有人的堆栈痕迹
  • profile:CPU配置文件。您可以在GET参数中指定持续时间。获取概要文件后,请使用go tool pprof命令调查文件。
  • threadcreate:导致创建新OS线程的堆栈跟踪
  • trace:当前程序执行的痕迹。您可以在GET参数中指定持续时间。获取跟踪文件后,使用go工具trace命令调查跟踪。

第四步: 通过Graphviz, 查看heap

从图中看, cpu的使用是0, heap的使用是2, 所以, 我们查看heap.

go tool pprof 127.0.0.1:8888/debug/pprof/heap

接下来我们可以通过help 查看pprof都有哪些命令. 常用的命令有. tree, top, web

我们用tree查看内存的使用情况

还可以使用top查看最消耗内存的地方

接下来还是使用web查看视图

视图更加直观, 哪一步消耗了多少内存

第五步: 模拟并发, 测试性能

这样的程序都是刚刚运行, 所以内存消耗, cpu消耗都比较少. 接下来我们模拟大量请求, 试一试性能如何

1. 下载一个模拟github.com/wg/wrk.git​​

在github上也有这个工具的介绍,

git clonegithub.com/wg/wrk.git
cd wrk
make

备注: 整个操作参考github上的说明即可.

2. 安装好wrk以后, 模拟批量请求

./wrk -c400 -t8 -d5m localhost:8899/v1/user/login

我模拟的是批量登录, 参数含义如下

  • -c400:我们有400个连接可以保持打开状态
  • ​​-t8​​:意味着我们使用8个线程来构建请求
  • ​​-d5m​​表示测试时间将持续5分钟

3. 在浏览器输入

localhost:8899/debug/pprof/

查看使用情况

4. awk执行完以后, 查看执行结果汇总

5. 接下来用go tool pprof 查看 heap

go tool pprof -alloc_space/-inuse_space localhost:8899/debug/pprof/heap-alloc_space: 过去使用的内存数据-inuse_space: 正在使用的内存数据

返回的视图





方框越大, 表示内存消耗越多.

参考文献:

1.​​www.jianshu.com/p/aa9b148e90e5​​

第八章性能优化中,如何深入探究pprof工具?