前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go pprof 使用

go pprof 使用

作者头像
solate
发布2019-07-22 17:55:25
8150
发布2019-07-22 17:55:25
举报
文章被收录于专栏:solate 杂货铺solate 杂货铺

go pprof

使用

一共有三种

web 程序

如果本身是web 程序, 就是可以在浏览器中直接访问,可以是系统或者http 接口api等

这种本身就可以直接访问的到,所以只需要在main 方法import中添加

代码语言:javascript
复制
_ "net/http/pprof" 

在浏览器中使用http://localhost:port/debug/pprof/直接看到当前web服务的状态

服务进程

如果是一个其他的进程,比如是一个服务的一部分,这个时候可能并没有直接用http 访问的入口

这个时候就可以使用这种方式

  • import 中添加3个包
代码语言:javascript
复制
import (
	 _ "net/http/pprof"
	"net/http"
	"log"
)
  • 然后在main方法中添加一个进程
代码语言:javascript
复制
go func() {
    log.Println(http.ListenAndServe("localhost:6060", nil)) 
}()

应用程序

这个时候并不是web 程序, 所以前面的方式都不行了

需要用到 runtime/pprof

  • 添加
代码语言:javascript
复制
import (
	"runtime/pprof"
	"flag"
	"os"
	"log"
)
  • cpu 分析文档
代码语言:javascript
复制
var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file")

func main() {
    flag.Parse()
    if *cpuprofile != "" {
        f, err := os.Create(*cpuprofile)
        if err != nil {
            log.Fatal(err)
        }
        pprof.StartCPUProfile(f)
        defer pprof.StopCPUProfile()
    }
    
    //... 其他

}

运行程序,生成profile文件

这里详细解释一下top命令的输出格式,例如:

14 2.1% 17.2% 58 8.7% std::_Rb_tree::find

各字段的含义依次是:

  1. 采样点落在该函数中的次数
  2. 采样点落在该函数中的百分比
  3. 上一项的累积百分比
  4. 采样点落在该函数,以及被它调用的函数中的总次数
  5. 采样点落在该函数,以及被它调用的函数中的总次数百分比
  6. 函数名
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • go pprof
    • 使用
      • web 程序
      • 服务进程
      • 应用程序
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档