两种使用 pprof 定位问题的形式:

  1. 在 test 用例中使用 runtime/pprof 中提供的方法
  2. 在 web 服务中引入 "net/http/pprof"

定位问题的过程,经常会用到火焰图。但火焰图也只能算是一个扩展加分项,数据同样还是从go tool pprof中获取的。一般也只看cpu、和堆栈的内存分配情况。

但我依旧存在一个疑问,针对CPU的Profile文件,在执行top命令时,这些列头究竟是什么意思?换一句话描述我的问题, flat 和 cum 的区别是什么?

 flat  flat%   sum%        cum   cum%

查阅官方的解释文档,下面是自认为官网比较关键性的解释:

The first two columns show the number of samples in which the function was running (as opposed to waiting for a called function to return), as a raw count and as a percentage of total samples

The third column shows the running total during the listing

The fourth and fifth columns show the number of samples in which the function appeared (either running or waiting for a called function to return). To sort by the fourth and fifth columns, use the -cum (for cumulative) flag:

字面上的意思很好理解: flat 表示样本中当前函数占用的CPU时间,cum表示当前函数以及当前函数调用其他函数的时间。但到底是不是这个意思呢,我也不是很清楚。

flat只包含当前函数的栈帧信息,不包括其调用函数的栈帧信息。cum字段正好弥补了这一点,flat%和cum%分别表示flat和cum字段占总字段的百分比。

思考了很久之后,我突然意识到另一个问题:在火焰图上,标识函数占比的数据,依靠了是 flat 还是 cum 呢?我顿悟式的有了一个假设:火焰图上使用的肯定是 cum,而 cum 数据是用于反应函数调用栈信息的。

果不其然,确实如此。

pprof中flat和cum的区别相关推荐

  1. python中break和continue的区别

    python中break和continue的区别 break 结束for 或者while 循环  后面还没循环到的 不再循环 continue 当满足某种条件时结束当前值的循环 后面没有循环的继续循环 ...

  2. java中separator_java - File.separator和路径中的斜杠之间的区别

    java - File.separator和路径中的斜杠之间的区别 在Java Path-String中使用/和普通的File.separator有什么区别? 与双反斜杠相比,/平台独立似乎不是原因, ...

  3. PHP中self和static的区别,php中self与static的区别

    原文链接,猛击这里. php中self与static的区别 通过一些示例,我们可以很容易看出self和static的区别.假定我们有class Car – 它有两个方法,model和getModel. ...

  4. php 抽象类 接口 区别,PHP中抽象类、接口的区别与选择分析

    本文实例分析了PHP中抽象类.接口的区别与选择.分享给大家供大家参考,具体如下: 区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过 ...

  5. php $this self,php中self与$this的区别

    学习php中self与$this的区别. 先来看下parent与self的例子: /* * parent与self的区别 * by www.jbxue.com */ class A{ function ...

  6. mysql中char与varchar的区别分析(补充一句,int和integer没区别)

    转自:http://www.jb51.net/article/23575.htm 在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定 ...

  7. python中bytearray和java中byte[]的区别_Python经典面试题:说说Python中xrange和range的区别?...

    昨晚一小伙后台问xrange和range有啥区别,讲了下他倒领悟的挺快,其实这也是你各面试Python岗位,经常会遇到的Python面试题,长个心眼哈,说不定明年3月你找工作就用上了. 废话不多说,开 ...

  8. python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法

    python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法 目录

  9. SQL中where与having的区别

    SQL中where与having的区别 目录 SQL中where与having的区别 创建表 插入数据 进行聚合操作 # WHERE是在聚合之前进行数据行的过滤而HAVING实在聚合之后进行新数据的过 ...

最新文章

  1. java实现aop的几种方式_SpringAOP 的三种实现方式
  2. Best practice for JVM Tuning[转]
  3. 02_Flink vs storm vs SparkStreaming、Flink vs storm对比图、实时框架如何选择
  4. C# ASP.NET B/S模式下,采用lock语法 实现多用户并发产生不重复递增单号的一种解决方法技术参考...
  5. 虚拟机Ubuntu开机后提示:无法应用原保存的显示器配置(屏幕显示问题)
  6. 存储服务器的操作系统,存储服务器是什么操作系统
  7. 【地理建模】空间统计分析:空间权重矩阵、全局空间自相关、局部空间自相关
  8. 甲骨文全面进军云计算市场
  9. 计算机适配器有什么作用,例举适配器是什么
  10. Linux内核深入理解中断和异常(3):异常处理的实现(X86_TRAP_xx)
  11. 微软:程序员们,是时候丢掉 Win 7 了!
  12. java 组合 遍历 算法_java编程n个集合每次从每个集合里面取出一个元素组成一个字符串列出所有组合算法...
  13. mysql 组复制 不一致_MySQL主从复制什么原因会造成不一致,如何预防及解决
  14. redis-实现排行榜
  15. codeblock图形界面编程
  16. CentOS在VMware上的安装和配置以及Xshell和Xftp的连接
  17. openwrt利用arp获取局域网设备IP
  18. 中国求职者2亿私人简历泄露,APT情报资讯报告2018全球十大安全事件(10401字) (附PDF公号发“简历十大安全”下载)
  19. linux语句tail和grep组合,Linux grep、tail命令的混合使用
  20. python识别人名-正则匹配百家姓

热门文章

  1. Python实现九九乘法表的几种方式,入门必备案例~超级简单~
  2. linux移动子目录到上一目录,linux 把当前目录的一个子目录里的文件移动到另一个子目录里用什么指令...
  3. oracle点上nullable,OracleParameter
  4. PostgreSQL教程--系统表详解及常用SQL
  5. Edge支持谷歌内核后。。。如何屏蔽广告。
  6. C语言学习 阶梯电价
  7. java trackid_TrackIdUtil.java
  8. android textview layoutparams,Android动态设置布局的LayoutParams属性总遇到造型异常
  9. 从mongodb移除分片
  10. 国产数据库清单;微盟《生产环境和数据恢复》;TiDB招聘;Oracle备份还原指南、GaussDB性能调优指南……墨天轮数据库周刊-第5期