UEditor wavedorm laravel curl vector EaselJS vue配置 后台模板下载 后台管理界面模板 android实战项目 change事件 hbase集群搭建 java 注解 java运算符 java重写和重载的区别 java搭建 java初级 java成员变量 java集成开发环境 局域网助手 rendercontrol 雪地求生 右键菜单背景 苹果5s降级 一件换肤 迅雷免费会员号共享 java电子书 如何给黑白照片上色 16进制编辑器 文字转语音软件免费版 天谕玲珑技能加点 qq悄悄话怎么知道对方是谁 画图3d 软媒u盘启动 python去重 js数组操作 汪文君 edius调色 mysql密码重置 ps减去顶层
当前位置: 首页 > 学习教程  > 编程语言

golang中的pprof支持

2021/2/13 16:29:04 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

Go语言有一个非常棒的设计就是标准库里面带有代码的性能监控工具,在两个地方有包: net/http/pprofruntime/pprof其实net/http/pprof中只是使用runtime/pprof包来进行封装了一下,并在http端口上暴露出来 beego支持pprof 目前beego框架新增了…

Go语言有一个非常棒的设计就是标准库里面带有代码的性能监控工具,在两个地方有包:

net/http/pprof

runtime/pprof

其实net/http/pprof中只是使用runtime/pprof包来进行封装了一下,并在http端口上暴露出来

beego支持pprof

目前beego框架新增了pprof,该特性默认是不开启的,如果你需要测试性能,查看相应的执行goroutine之类的信息,其实Go的默认包"net/http/pprof"已经具有该功能,如果按照Go默认的方式执行Web,默认就可以使用,但是由于beego重新封装了ServHTTP函数,默认的包是无法开启该功能的,所以需要对beego的内部改造支持pprof。

  • 首先在beego.Run函数中根据变量是否自动加载性能包
if PprofOn {
    BeeApp.RegisterController(`/debug/pprof`, &ProfController{})
    BeeApp.RegisterController(`/debug/pprof/:pp([\w]+)`, &ProfController{})
}
  • 设计ProfConterller
package beego

import (
    "net/http/pprof"
)

type ProfController struct {
    Controller
}

func (this *ProfController) Get() {
    switch this.Ctx.Params[":pp"] {
    default:
        pprof.Index(this.Ctx.ResponseWriter, this.Ctx.Request)
    case "":
        pprof.Index(this.Ctx.ResponseWriter, this.Ctx.Request)
    case "cmdline":
        pprof.Cmdline(this.Ctx.ResponseWriter, this.Ctx.Request)
    case "profile":
        pprof.Profile(this.Ctx.ResponseWriter, this.Ctx.Request)
    case "symbol":
        pprof.Symbol(this.Ctx.ResponseWriter, this.Ctx.Request)
    }
    this.Ctx.ResponseWriter.WriteHeader(200)
}

使用入门

通过上面的设计,你可以通过如下代码开启pprof:

beego.PprofOn = true

 

我们可以通过命令行获取更多详细的信息

go tool pprof http://localhost:8080/debug/pprof/profile

这时候程序就会进入30秒的profile收集时间,在这段时间内拼命刷新浏览器上的页面,尽量让cpu占用性能产生数据。

(pprof) top10

Total: 3 samples

   1 33.3% 33.3% 1 33.3% MHeap_AllocLocked

   1 33.3% 66.7% 1 33.3% os/exec.(*Cmd).closeDescriptors

   1 33.3% 100.0% 1 33.3% runtime.sigprocmask

   0 0.0% 100.0% 1 33.3% MCentral_Grow

   0 0.0% 100.0% 2 66.7% main.Compile

   0 0.0% 100.0% 2 66.7% main.compile

   0 0.0% 100.0% 2 66.7% main.run

   0 0.0% 100.0% 1 33.3% makeslice1

   0 0.0% 100.0% 2 66.7% net/http.(*ServeMux).ServeHTTP

   0 0.0% 100.0% 2 66.7% net/http.(*conn).serve 

(pprof)web

本文链接: http://www.dtmao.cc/news_show_700044.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?