zoukankan      html  css  js  c++  java
  • 第八章--实际项目性能分析--pprof分析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, 这是会看到如下页面

    为什么我们的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, 另一个是操作数据库。 这样我们就可以有针对性的进行优化了

     

     

     

     

  • 相关阅读:
    数据库表结构变动发邮件脚本
    .net程序打包部署
    无法登陆GitHub解决方法
    netbeans 打包生成 jar
    第一次值班
    RHEL6 纯命令行文本界面下安装桌面
    C语言中格式化输出,四舍五入类型问题
    I'm up to my ears
    How to boot ubuntu in text mode instead of graphical(X) mode
    the IP routing table under linux@school
  • 原文地址:https://www.cnblogs.com/ITPower/p/12324659.html
Copyright © 2011-2022 走看看