首页 > 系统相关 >使用 go tool pprof 跟踪优化 cpu 和 内存

使用 go tool pprof 跟踪优化 cpu 和 内存

时间:2023-03-22 20:36:51浏览次数:48  
标签:http MB pprof tool 6060 go

搜了一些文章来看 实在是没有重点,自己归纳一下。

其实直接看文档已经比较清楚但是文档部分似乎没有一些介绍如何看火焰图之类的细节,这里一并归纳总结一下。

 

收集性能数据

在看数据之前首先要收集数据,我们需要在需要测试性能的代码中插入 pprof 库和启动一个 http server。 这个 server 会让我们可以访问获取运行期间性能数据。

在代码中 import 

import _ "net/http/pprof"

然后在主函数中启动一个 go routinue 保持 server 运行

go func() {
    http.ListenAndServe("localhost:6060", nil)
}()

 

查看性能数据

交互式查看 heap 直接通过

go tool pprof http://localhost:6060/debug/pprof/heap

这里会有一个问题,直接使用这个命令就会进入交互式的界面,并且会得到一个压缩文件

/Users/zzou/pprof/pprof.alloc_objects.alloc_space.inuse_objects.inuse_space.008.pb.gz

输入 top 可以看到排序过的当前 top 消耗的函数

go tool pprof 输出的分析结果中,各列的含义如下:

flat: 此函数自身所消耗的资源量(例如 CPU 时间、内存分配等)。
flat%: 此函数自身所消耗的资源量占整个程序消耗资源的百分比。
sum%: 当前函数及之前列出的函数(按 flat% 排序)总共消耗的资源百分比。
cum: 此函数及其所有调用者(包括递归调用)消耗的资源量。
cum%: 此函数及其所有调用者消耗的资源量占整个程序消耗资源的百分比。
calls: 此函数被调用的次数(仅适用于 CPU 分析)。
calls%: 此函数被调用次数占所有函数调用次数的百分比(仅适用于 CPU 分析)。
      flat  flat%   sum%        cum   cum%
  210.56MB 55.77% 55.77%   233.56MB 61.86%  encoding/json.(*decodeState).objectInterface
   52.01MB 13.78% 69.55%    52.01MB 13.78%  reflect.mapassign_faststr
   15.24MB  4.04% 73.58%    15.24MB  4.04%  bufio.NewReaderSize
   14.54MB  3.85% 77.43%    14.54MB  3.85%  AppInsightsCollector/src/toolkits.TabSeparatedEnrichedEvent
   12.50MB  3.31% 80.74%    12.50MB  3.31%  encoding/json.(*decodeState).convertNumber
   10.91MB  2.89% 83.63%    10.91MB  2.89%  AppInsightsCollector/src/libs/deviceatlas/device.processTree
   10.66MB  2.82% 86.46%    10.66MB  2.82%  bufio.NewWriterSize
      10MB  2.65% 89.11%    10.50MB  2.78%  encoding/json.unquote (inline)
       8MB  2.12% 91.23%        8MB  2.12%  reflect.makemap
    5.02MB  1.33% 92.55%     5.02MB  1.33%  github.com/valyala/fasthttp.appendBodyFixedSize

当然我们想要看图,可视化的东西可以让我们更清晰的了解性能问题到底在哪儿

 

我们可以使用工具读取刚才获得的 gz 文件

go tool pprof -http=:8081 /Users/zzou/pprof/pprof.alloc_objects.alloc_space.inuse_objects.inuse_space.008.pb.gz

执行上面命令会自动弹出性能页面

该图已经比较清晰的搞明白到底在哪里花费了比较多的内存了。

 

 

如果需要当然我们还可以选择查看火焰图

 

 

其实 cpu 的性能观测也跟上面一致

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/profile?seconds=30
go tool pprof http://localhost:6060/debug/pprof/block
go tool pprof http://localhost:6060/debug/pprof/mutex
curl -o trace.out http://localhost:6060/debug/pprof/trace?seconds=5
go tool trace trace.out

 

 

 

Reference:

https://pkg.go.dev/net/http/pprof

标签:http,MB,pprof,tool,6060,go
From: https://www.cnblogs.com/piperck/p/17245317.html

相关文章

  • wails 基于golang 的跨平台开发解决方案
    wails是可以使用golang进行跨平台开发的框架参考使用依赖需要go18+,node15+安装 goinstallgithub.com/wailsapp/wails/v2/cmd/wails@latest......
  • go入門:簡單輸出及編譯與運行
    1.go安裝及windows環境配置轉載:https://blog.csdn.net/qq_44830881/article/details/123457805教程地址:https://yar999.gitbook.io/gopl-zh/ch1/ch1-01 2.簡單輸出及......
  • IOS 不支持this.$router.go解决办法
    在使用Vue路由实例对象$router.go进行页面切换时ios是不起作用得,可以使用location.href = "javascript:history.go(-2);"解决......
  • golang解决kafka消息重复发送和重复消费
    1、解决消息重复发送当使用Kafka生产者发送消息时,可以设置消息的Key,使用Key来保证相同Key的消息不会被重复发送。在发送消息时,可以使用带Key的消息发送方式,如下所示:msg......
  • RunnerGo可视化场景管理,还原真实场景
    在进行性能测试时,测试场景的正确配置非常关键。首先,需要根据业务场景和需求,设计出合理的测试场景,再利用相应的工具进行配置,实现自动化的性能测试。在JMeter中,用户需要自己......
  • RunerGo:随时调整任务参数,测试报告实时查看
    我们在做性能测试时,偶尔需要在测试任务执行时调整参数配置,需要关注压力机状态和测试情况。这篇文章给大家介绍一下如何通过RunnerGo,在测试任务执行过程中调整任务参数,实时......
  • ElementUi使用el-tooltip实现超出部分显示省略号
    效果前:效果后:创建myTooltio.vue组件<template><divclass="tooltip-container"><el-tooltipclass="my-tooltip":disabled="showTooltip":content="t......
  • MongoDB 数据库部署和应用
    推荐步骤:➢在Centos01上部署MongoDB服务器客户端登录验证➢在Centos01的MongoDB配置文件通过控制文件控制MongoDB服务,配置MongoDB身份验证➢在Centos01......
  • Going Deeper With Directly-Trained Larger Spiking Neural Networks
    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!TheThirty-FifthAAAIConferenceonArtificialIntelligence(AAAI-21) Abstract脉冲神经网络(SNN)在时空......
  • Argon creative-tim UI with create-react-native-app
    ReactNativeElements开发环境&生成项目&虚拟机调试&本地生成APK档&虚拟机运行APK档1.0 Argoncreative-timUIhttps://demos.creative-tim.com/argon-pro-rea......