当前位置:网站首页>以go语言为例类比侦探推理来讲解【性能分析】
以go语言为例类比侦探推理来讲解【性能分析】
2022-07-23 05:46:00 【liangdu_Zuker】
pprof 对go语言进行性能分析
pprof 提供一个探针包,需要引入到被【检测程序 Main】 中,然后探针生成的文件,可以被pprof提供的分析工具读取分析。
注意:探针监控的指标越多,对 Main 的资源的占用会变多。
流程简要:
【探针包】
“runtime/pprof”
然后就是创建【剖析文件】
profile, _ := os.Create(“cpu_profile”)
cpu_profile 是剖析文件的自定义名称
启动 pprof 【剖析程序】,并产生文档到指定【剖析文件】
_ = pprof.StartCPUProfile(profile)
关闭【剖析程序】
defer pprof.StopCPUProfile()
使用【剖析文件解析器】,解析【剖析文件】
go tool pprof progname cpu_profile
总结
这里有四个概念:
- 探针包
- 剖析文件
- 剖析程序
- 剖析文件解析器
看名称就能知道概念的意思了。
监控项与指标:
监控项:
- cpu监控
各个函数的cpu占用率或者消耗的时长 (直接看flat参数)
- 堆内存开销监控
内存的分配量以及回收量,和堆内存各个对象的占用量
- 锁资源的阻塞监控
各个指令执行时阻塞开销时间,以及指令的位置
- 线程/协程的监控
各个函数的协程的数量以及比例。
监控项的意义
cpu可以了解代码算法的复杂度。
内存可以了解资源的占有,以及对象的分布。
锁可以了解运行时的业务交互细节,判断哪些交互逻辑不合理以及业务设计上的缺陷。
线程/协程的监控 可以了解运行时有哪些线程或者协程序在工作,以及他们在故障发生时所处的调用栈的位置。
【类比】我们把监控当作是侦探工作。
cpu监控可以让我们了解案发时间点和范围,以及初步定位案件性质是“他杀还是自杀”?(被抢了资源,还是自己用光了cpu资源)
内存可以让我们案发时,各个有关人员的不在场证明,以及案发时周围环境的分布,甚至我们可以从中找到作案工具后直接找到真相。
锁资源的阻塞情况可以让我们分析被害人案发前是否存在纠葛,帮助我们推断作案动机。
线程/协程的监控,可以帮助我们了解发现后各个涉事人员目前都在走什么,帮助我们快速对嫌疑人进行初步过滤,缩小凶手的排查范围。
【推广】 trace 与 pprof 的区别
trace 与 pprof 同样作为性能分析工具,用法都一样。
只是在展示数据的粒度不一样。
trace 的粒度更细,你可以按照 每一个请求流程的粒度去了解 cpu/内存/线程/锁资源 的消耗情况。
pprof 则是站在程序的角度,审视整个程序业务总量上的消耗情况。
边栏推荐
猜你喜欢

视频编解码相关资料汇总
![[fee of AUTOSAR (difference between nonvolatile memory flash and EEPROM)]](/img/cc/34bfcc450d82befab24173b0cb132d.png)
[fee of AUTOSAR (difference between nonvolatile memory flash and EEPROM)]

GameFramework:资源热更代码分析,检查版本信息,下载版本文件,校验版本文件,得到更新文件数量,下载文件,TaskPool
Blog Building III: comment system selection

C#:快速排序,有相同的数字会忽略,然后继续先前的寻找方向去找下一个满足要求的数字进行替换

Redis——基础概念

即时通讯WebSocket

Navicat for MySQL 安装教程

Unity3d:UGUI,UI与特效粒子层级,2018.2以上版本BakeMesh,粒子在两个Image之间且在ScrollView
![[AUTOSAR com 2. Advanced introduction to communication protocol stack]](/img/d2/16b58126a160a13e22eb8158f5ec8c.png)
[AUTOSAR com 2. Advanced introduction to communication protocol stack]
随机推荐
Configure TX1 system + set to solid-state disk startup
HCIP---MGRE环境下的OSPF综合实验
0最短路径问题 LeetCode743. 网络延迟时间
Prometheus Operator使用指南笔记
Blog building six: the method of binding your own domain name
Unity在URP管线下使用TriLib插件加载模型材质不正确的问题
配置历史版本Detectron遇到的问题
用单向链表实现 队列
LVS负载均衡调度原理及配置方法
C#:快速排序,有相同的数字会忽略,然后继续先前的寻找方向去找下一个满足要求的数字进行替换
整数乘以整数溢出了
基于UDP的群聊聊天室
Summary of video coding and decoding related data
0动态规划 LeetCode918. 环形子数组的最大和
详解TCP的流量控制机制与拥塞控制机制
如何用普通的文本编辑器写Web页面
[bootloader architecture and brushing process based on UDS service]
HCIP---MGRE综合实验
hot 100深度优先
HCIP-第一次实验