加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2021-05-21 06:22:48 所属栏目:大数据 来源: https://www.jb51.cc
导读:下面分析近期做过的一个beego项目 最新开发了一个go项目,目前已经上线,昨天研究了性能测试,那就对之前做的项目进行一个性能分析吧 给beeg项目添加pprof功能. 百度查了,说beego是支持pprof的,只需要在配置文件中beego.PprofOn = true开启即可,但我试了似乎不

下面分析近期做过的一个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,这是会看到如下页面

?

为什么我们的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表示的是数据的类型是实时数据

           ?

          

?

通过这个图, 我们看到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/

查看使用情况:

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

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

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

?

?

?

?

?

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

?

?

?

?

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读