cpu profiler及火焰图学习
转自:https://blog.csdn.net/10km/article/details/83820080
1.profiler输出
大字体显示的节点就是CPU使用率的’热点’。上述为SVG模式,可伸缩向量图形(Scalable Vector Graphics)。
图形风格的性能报告由节点和有向边组成, 每个节点代表一个函数,节点数据格式:
有向边:调用者指向被调用者,有向边上的时间表示被调用者所消耗的CPU时间。
性能分析通过抽样方法完成,默认是1秒100个样本,一个样本是10毫秒,即时间单位是10毫秒;可以通过环境变量CPUPROFILE_FREQUENCY
设置采样频率。
2.火焰图
转自:https://www.infoq.cn/article/a8kmnxdhbwmzxzsytlga
-
每一列代表一个调用栈,每一个格子代表一个函数
-
纵轴展示了栈的深度,按照调用关系从下到上排列,下面是上面的父函数。最顶上格子代表采样时,正在占用 cpu 的函数。
-
横轴的意义是指:火焰图将采集的多个调用栈信息,通过按字母横向排序的方式将众多信息聚合在一起。需要注意的是它并不代表时间。
-
横轴格子的宽度代表其在采样中出现频率,调用频次,所以一个格子的宽度越大,说明它是瓶颈原因的可能性就越大。(表示这个函数占用的cpu时间长)
-
火焰图格子的颜色是随机的暖色调,方便区分各个调用信息。
-
其他的采样方式也可以使用火焰图, on-cpu 火焰图横轴是指 cpu 占用时间,off-cpu 火焰图横轴则代表阻塞时间。
-
不同类型火焰图适合优化的场景不同,比如 on-cpu 火焰图适合分析 cpu 占用高的问题函数,off-cpu 火焰图适合解决阻塞和锁抢占问题。(还没学过)