专注后台开发相关技术,广度深度并存,干货情怀同在。
微信搜索【盼盼编程】关注这个不一样的程序员。

❤️强烈推荐人工智能学习网站❤️

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

net/http/pprofruntime/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 beegoimport ("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) top10Total: 3 samples1 33.3% 33.3% 1 33.3% MHeap_AllocLocked1 33.3% 66.7% 1 33.3% os/exec.(*Cmd).closeDescriptors1 33.3% 100.0% 1 33.3% runtime.sigprocmask0 0.0% 100.0% 1 33.3% MCentral_Grow0 0.0% 100.0% 2 66.7% main.Compile0 0.0% 100.0% 2 66.7% main.compile0 0.0% 100.0% 2 66.7% main.run0 0.0% 100.0% 1 33.3% makeslice10 0.0% 100.0% 2 66.7% net/http.(*ServeMux).ServeHTTP0 0.0% 100.0% 2 66.7% net/http.(*conn).serve (pprof)web

❤️强烈推荐人工智能学习网站❤️

专注后台开发相关技术,广度深度并存,干货情怀同在。
微信搜索【盼盼编程】关注这个不一样的程序员。

golang中的pprof支持相关推荐

  1. Golang中函数不支持重载

    Golang中函数不支持重载

  2. golang中的Session支持

    session集成 beego中主要有以下的全局变量来控制session处理: //related to session SessionOn bool // 是否开启session模块,默认不开启 S ...

  3. Golang程序性能分析(二)在Echo和Gin框架中使用pprof

    前言 今天继续分享使用Go官方库pprof做性能分析相关的内容,上一篇文章:Golang程序性能分析(一)pprof和go-torch中我花了很大的篇幅介绍了如何使用pprof采集Go应用程序的性能指 ...

  4. Golang中支持可变参数

    Golang中支持可变参数 (如果你希望函数带有可变数量的参数) package main import "fmt" //定义一个函数,函数的参数为:可变参数 ... 参数的数量可 ...

  5. Golang 中使用 JSON 的一些小技巧 陶文 陶文 3 个月前 有的时候上游传过来的字段是string类型的,但是我们却想用变成数字来使用。 本来用一个json:,string 就可以支持了

    Golang 中使用 JSON 的一些小技巧 陶文 3 个月前 有的时候上游传过来的字段是string类型的,但是我们却想用变成数字来使用. 本来用一个json:",string" ...

  6. onclick如何调用含参函数_在 golang 中如何调用私有函数(绑定隐藏的标识符)

    名字在 golang 中的重要性和在其他任何一种语言是一样的.他们甚至含有语义的作用:在一个包的外部某个名字的可见性是由这个名字首字母是否是大写来决定的. 有时为了更好的组织代码或者在其他包使用某些隐 ...

  7. Golang中Buffer高效拼接字符串以及自定义线程安全Buffer

    本文原创文章,转载注明出处,博客地址 https://segmentfault.com/u/to... 第一时间看后续精彩文章.觉得好的话,顺手分享到朋友圈吧,感谢支持. Go中可以使用"+ ...

  8. 如何在golang中关闭bufio.reader_Golang 并发模型系列:1. 轻松入门流水线模型

    Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! Golang作为一个实用主义的编程语言,非常注重性能,在语言特性上天然支持并发,它有多种并发模型,通过流水线模型系列文 ...

  9. Go实战--golang中使用redis(redigo和go-redis/redis这个已测试)

    自己做测试了没有问题,虚拟机连不上可以把包下载到本地. 版权声明:本文为博主原创文章,未经博主允许不得转载. http://blog.csdn.net/wangshubo1989/article/de ...

最新文章

  1. 编程模拟洗牌和发牌过程c语言,洗牌发牌模拟系统课程设计报告.doc
  2. php函数:register_shutdown_function
  3. [原]SQL解决“俯瞰金字塔”矩阵
  4. linux solusos 软件包管理工具 eopkg 简介
  5. 计算机视觉对扫描文件分类 OCR
  6. 定时线程_SpringBoot定时任务,@Async多线程异步执行
  7. linux创建脚本文件auto,linux 自动化部署脚本
  8. oracle服务开机自启动
  9. 如何写一个不带BOM的UTF8文件
  10. 7-43 币值转换 (20分)_「篮球看吧」40岁了!生涯25年!还狂砍33分+联赛得分王,这他么是人吗...
  11. 数学建模层次分析法例题及答案_【热门推荐】影响力意志力创新力、数学建模简明教程...
  12. 《Java 解惑》笔记(一)
  13. matlab 不确定度计算器,A类贝塞尔不确定度计算器
  14. asus官方android升级包,华硕ASUS手机平板官方刷机包raw格式解压修改工具
  15. 怎么才能获得一个mid文件的音调
  16. Python实现CRAPS赌博游戏
  17. 成长,没你想得那么迫切——雅虎《另一种活法》
  18. 【Spikingjelly】SNN框架教程的代码解读_4
  19. 六、阻塞队列与源码分析(上)
  20. P1335 [NOI2013] 小Q的修炼 题解

热门文章

  1. 【Android 组件化】使用 Gradle 实现组件化 ( 组件 / 集成模式下的 Library Module 开发 )
  2. 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)
  3. 子串在主机中出现的位置indexOf()--简单
  4. 702:Crossing River (贪心)
  5. Django ORM 级联删除
  6. maven 常用插件3
  7. Java的this、super和final关键字
  8. 响应式 媒体查询 盒模型
  9. [转]RedHat Enterprise Linux 7关闭防火墙方法
  10. 第五节 suid/ sgid /sbit /which /locate / find /stat / ln / uname -a