pprof性能分析

bytemode · · 1461 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

## pprof性能分析 golang在语言层面集成了profile采样工具,在程序运行过程中可以获取cpu、heap、block、traces等执行信息 获取profile数据的两种形式:web形式与profile文件生成形式. ### web方式 引入 “net/http/pprof"包,并在主函数中添加一下代码 `http.ListenAndServe(":8080", nil)` 其中,net/http/pprof包的init函数中注册了debug/pprof/路由到http服务中,用浏览器打开http://localhost:8080/debug/pprof/,即可使用pprof提供的功能。 #### 整体信息 http://127.0.0.1:8080/debug/pprof 查看整体信息 allocs allocs报告过去的内存申请情况 block 报告协程阻塞的情况,可以用来分析和查找死锁等性能瓶颈, 需要调用runtime.SetBlockProfileRate开启 cmdline 主要是调用os.Args,获取程序启动时的命令及参数 goroutine 有哪些协程正在运行、有多少协程在运行等 heap 查看堆相关信息,包括一些GC的信息 mutex 查看互斥的争用情况,默认不开启, 需要调用需要在程序中调用runtime.SetMutexProfileFraction threadcreate 查看系统线程创建信息 trace 可以向你揭示:Go程序运行中的所有的运行时事件 获取trace文件使用`go tool trace trace文件`进行分析 profile 返回CPU的profile,调用了runtime/pprof包的StartCPUProfile,采样频率为100Hz 获取prifiel文件`go tool pprof profile文件` 进行分析 #### 进入tty分析 从terminal进入profile,进行细致分析 go tool pprof http://localhost:6060/debug/pprof/profile go tool pprof http://localhost:6060/debug/pprof/heap go tool pprof http://localhost:6060/debug/pprof/block ### profile文件方式 通过实现代码 ``` import "runtime/pprof" cpuf, err := os.Create("cpu_profile") if err != nil { log.Fatal(err) } //cpu profile pprof.StartCPUProfile(cpuf) defer pprof.StopCPUProfile() memf, err := os.Create("mem_profile") if err != nil { log.Fatal(err) } //heap profile if err := pprof.WriteHeapProfile(memf); err != nil { log.Fatal(err) } defer memf.Close() ``` 编译如上程序生成可执行文件main,运行man会生成cpu_profile文件 分析profile go tool pprof main cpu_profile 执行这个命令就进入了profile 文件了 输入help查看支持命令: web, top, peek, list top: 列出耗时操作 peek: 是用来查询 函数名字的,这个名字是list需要使用的名字 list: 是用来将函数时间消耗列出来的

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1461 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传