simpleperf 火焰图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了simpleperf 火焰图相关的知识,希望对你有一定的参考价值。

参考技术A 1. 获取simpleperf的可执行文件

android\system\extras\simpleperf\scripts\bin\android

2 利用simpleperf抓取perf.data数据

adb shell simpleperf record -p 1791 -g --duration 30 -o /sdcard/perf.data

3  pull数据到指定的目录

simpleperf-master$ adb pull /sdcard/perf.data

4 . 在该目录下执行如下指令

python report_sample.py --symfs android/out/target/product/sdm710/symbols/vendor/lib/hw/ > out.perf

注:示例中的 " --symfs " 指定符号表

5. 从github中获取如下工具

git clone https://github.com/brendangregg/FlameGraph.git

6. 生成火焰图

在 simpleperf-master$ 运行  python report_sample.py > ./FlameGraph-master/out.perf

进入 /FlameGraph-master 下运行

./stackcollapse-perf.pl out.perf >out.folded

./flamegraph.pl out.folded >p.svg

注:上面的2个工具存在于FlameGraph的git仓库中 ,最后生成的p.svg需要用Google Chrome打开

Linux系统火焰图以及Java火焰图

CentOS7.8

安装perf

#yum install perf

执行perf

执行perf record 命令,记录该PID的行为
#perf record -a -g -p 14851 -- sleep 30  --30秒后退出

需要注意后面生成svg图片的所有命令要和当前perf在同一目录,不然会报错。


#perf report

安装git

#yum -y install git

下载FlameGraph

#git clone https://github.com/brendangregg/FlameGraph.git

生成火焰图

//生成脚本文件
#perf script -i perf.data &> perf.unfold                        

#./FlameGraph/stackcollapse-perf.pl perf.unfold &> perf.folded 
             
//执行完成后生成perf.svg图片,可以下载到本地,用浏览器打开 perf.svg
#./FlameGraph/flamegraph.pl perf.folded > perf.svg  

火焰图是基于 stack 信息生成的 SVG 图片, 用来展示 CPU 的调用栈。

y 轴表示调用栈, 每一层都是一个函数. 调用栈越深, 火焰就越高, 顶部就是正在执行的函数, 下方都是它的父函数.

x 轴表示抽样数, 如果一个函数在 x 轴占据的宽度越宽, 就表示它被抽到的次数多, 即执行的时间长. 注意, x 轴不代表时间, 而是所有的调用栈合并后, 按字母顺序排列的.

火焰图就是看顶层的哪个函数占据的宽度最大. 只要有 “平顶”(plateaus), 就表示该函数可能存在性能问题。

颜色没有特殊含义, 因为火焰图表示的是 CPU 的繁忙程度, 所以一般选择暖色调.
 

参考:火焰图(Flame Graphs)的安装和基本用法 - 寒冰宇若 - 博客园

 ===================================

生成Java火焰图

Async-profiler是一个对系统性能影响很少的Java采样分析器,它的实现是基于HotSpot特有的API,通过这些特有的API收集堆栈跟踪和跟踪内存分配,因而其可以和OpenJDK、Oracle JDK和其他基于HotSpot JVM的Java应用在运行时协同工作。

Github项目链接地址:https://github.com/jvm-profiling-tools/async-profiler

Async-profiler可以跟踪以下类型的事件:

  • CPU周期;
  • 硬件和软件性能计数器,如缓存未命中、分支未命中、页面错误、上下文切换等;
  • Java堆中的分配;
  • 满足的锁定尝试,包括Java对象监视器和可重入锁;

支持的平台Linux / x64 / x86 / ARM / AArch64macOS / x64注意:macOS分析仅限于用户空间代码。

生成的火焰图,绿色代表用户栈,黄色代表jvm,红色代表内核;横坐标代表cpu使用的时间。例如:

参考:如何读懂火焰图?+ 实例讲解程序性能优化 - xuxh120 - 博客园

 

以上是关于simpleperf 火焰图的主要内容,如果未能解决你的问题,请参考以下文章

Golang FlameGraph(火焰图)

如何看火焰图?

Arthas生成Kafka火焰图

IDEA 中使用火焰图

C++:perf + Flame Graph火焰图生成

Linux系统火焰图以及Java火焰图