第八章--实际项目性能分析--pprof分析beego项目的性能

简介: 下面分析近期做过的一个beego项目

下面分析近期做过的一个beego项目


最新开发了一个go项目, 目前已经上线, 昨天研究了性能测试, 那就对之前做的项目进行一个性能分析吧


给beeg项目添加pprof功能. 百度查了, 说beego是支持pprof的, 只需要在配置文件中beego.PprofOn = true开启即可, 但我试了似乎不行. 采用另一种方法


第一步: import 增加net/http/pprof包


import(
    _ net/http/pprof
)


第二步: 打开http端的监听端口


go func() {
        http.ListenAndServe("localhost:8888", nil)
}()


这里定义了一个协程, 我直接把这个协程放在main启动函数里了, 和main函数一起启动监听程序


第三步: 在网页上查看, 输入http://localhost:8888/debug/profile, 这是会看到如下页面


微信图片_20220510132129.png

为什么我们的heap才是2, 原因是,这个项目我是刚刚启动的。 随着请求访问的增加,连接数也会增加。 后面我们来模拟大量http请求, 具体含义如下


  • 2 allocs: 过去所有内存分配的样本


  • 0 block: 堆栈导致对原始同步的阻塞


  • 0 cmline: 当前程序的命令行调用


  • 16 goroutine: 当前所有goroutine的堆栈跟踪


  • 2 heap: 活动对象内存分配的采样。您可以指定gc GET参数以在获取堆样本之前运行GC。


  • 0 mutex: 竞争互斥持有人的堆栈痕迹


  • 0 profile: CPU配置文件。您可以在GET参数中指定持续时间。获取概要文件后,请使用go tool pprof命令调查文件。


  • 21 threadcreate: 导致创建新OS线程的堆栈跟踪


  • 0 trace: 当前程序执行的痕迹。您可以在GET参数中指定持续时间。获取跟踪文件后,使用go工具trace命令调查跟踪。

 

第四步: 通过Graphviz, 查看heap


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


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


然后输入web, 生成svg文件, 直接用浏览器打开, 如下:


inuse_space表示的是数据的类型是实时数据

微信图片_20220510132203.png微信图片_20220510132215.png微信图片_20220510132220.png通过这个图, 我们看到main调用以后的执行过程, 每一步的耗时是多少。


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


1. 下载一个模拟http请求的工具wrk(模拟现实, 了解系统瓶颈, 将服务器置于一个繁忙的状态, 就像生产环境一样. ), 下载地址: https://github.com/wg/wrk.git


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


git clonehttps://github.com/wg/wrk.git
cd wrk
make


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


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


./wrk -c400 -t8 -d5m http://localhost:8888/deer/v1/user/login


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


  • -c400: 我们有400个连接可以保持打开状态


  • -t8 :意味着我们使用8个线程来构建请求


  • -d5m 表示测试时间将持续5分钟


3. 在浏览器输入


http://localhost:8888/debug/pprof/

查看使用情况:

微信图片_20220510132320.png


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


微信图片_20220510132336.png微信图片_20220510132339.png


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


go tool pprof -alloc_space/-inuse_space http://localhost:8888/debug/pprof/heap

微信图片_20220510132409.png微信图片_20220510132412.png微信图片_20220510132416.png微信图片_20220510132420.pngimage.png


可以清晰的看到两块占内存使用最多的地方, 第一个是bufio的Writer和Reader, 另一个是操作数据库。 这样我们就可以有针对性的进行优化了

相关文章
|
3月前
|
数据可视化 Go 数据库
性能分析神器:pprof命令详解与实战
性能分析神器:pprof命令详解与实战
160 0
性能分析神器:pprof命令详解与实战
|
1月前
|
监控 NoSQL MongoDB
|
2月前
|
监控 数据可视化 数据挖掘
Golang性能分析神器:pprof与火焰图实战揭秘
在软件开发的世界里,性能分析如同一把锋利的剑,它能帮助开发者洞悉程序的运行状态,发现并解决那些隐藏在代码深处的性能瓶颈。而在Go语言的生态系统中,pprof无疑是这把剑中的佼佼者。本文将带你深入了解pprof的使用方法,并通过火焰图这一直观的工具,让你对性能分析有一个全新的认识。
|
6月前
|
SQL 存储 关系型数据库
【MYSQL高级】Mysql的SQL性能分析【借助EXPLAIN分析】
【MYSQL高级】Mysql的SQL性能分析【借助EXPLAIN分析】
73 0
|
5月前
|
存储 算法 编译器
【霍罗维兹数据结构】数据抽象化 | 时间复杂度 | 性能分析与性能度量
【霍罗维兹数据结构】数据抽象化 | 时间复杂度 | 性能分析与性能度量
41 0
|
SQL 存储 缓存
《MySQL高级篇》七、性能分析工具的使用(慢查询日志 | EXPLAIN | SHOW PROFILING | 视图分析 )(一)
《MySQL高级篇》七、性能分析工具的使用(慢查询日志 | EXPLAIN | SHOW PROFILING | 视图分析 )
《MySQL高级篇》七、性能分析工具的使用(慢查询日志 | EXPLAIN | SHOW PROFILING | 视图分析 )(一)
|
存储 监控 Oracle
定位任意时刻性能问题,持续性能分析实践解析
定位任意时刻性能问题,持续性能分析实践解析
定位任意时刻性能问题,持续性能分析实践解析
|
监控 数据可视化 数据挖掘
Go pprof 性能分析工具 - 详细使用图解
Go pprof 性能分析工具 - 详细使用图解
996 0
Go pprof 性能分析工具 - 详细使用图解
|
Web App开发 监控 前端开发
前端如何进行网站性能分析及优化性能
前端如何进行网站性能分析及优化性能
|
SQL 存储 JSON
《MySQL高级篇》七、性能分析工具的使用(慢查询日志 | EXPLAIN | SHOW PROFILING | 视图分析 )(四)
《MySQL高级篇》七、性能分析工具的使用(慢查询日志 | EXPLAIN | SHOW PROFILING | 视图分析 )
《MySQL高级篇》七、性能分析工具的使用(慢查询日志 | EXPLAIN | SHOW PROFILING | 视图分析 )(四)