开发者学堂课程【线上问题排查利器 Alibaba Arthas(下):Profiler 生成火焰图】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/747/detail/13209
Profiler 火焰图
内容介绍:
一、Profiler 火焰图的目标
二、Profiler 的主要作用
三、案例
四、火焰图的含义
五、小结
一.目标:生成火焰图
介绍:Profiler 命令支持生成应用热点的火焰图。本质上是通过不断采样,把收集到的采样结果生成火焰图。
命令基本运行结构是 profiler 命令{命令参数}。
二.profiler 主要的作用
profiler 主要的作用是用来生成火焰图。
Arthas 当中有一条命令,这条命令叫profiler。它支持生成应用热点的火焰图。
所谓的应用热点可以用来监听不同的事件,在默认的情况下它监听的是cpu。
火焰生成的是cpu的火焰图。它本质上是通过不断的去采样,把收集到的采样的结果生成一张火焰图。profile的命令本身很简单,它的基本结构就是一个Profiler。
它后面跟命令,再跟这个命令的参数。并且这个命令参数是可选的,所以用中括号括起来。火焰图的使用很简单,关键是以后生成的火焰图需要能分析和读懂。
三.案例
首先第一个例子是要先启动 profiler。
启动的作用是什么?
就是开始记录,从现在开始每隔一段时间获取它的采样的样本,并且生成火焰图。
首先输入 profiler。启动profiler的命令叫start。再按回车,它就会开始启动。这个地方会有提示,在默认的情况下就是对cpu进行采样(profiling)。如下代码所示:
arthas@10829]$ profiler start
Started [ cpu ] profiling
[ arthas@10829]$
如果想知道它到底支持哪一些事件,也可以通过一条命令:list
这条命令可以显示出profiler所支持的所有的事件。按回车,以下看到的就是profiler它支持的一些事件,如下代码所示:
[ arthas@10829]$ profiler start
Started [cpu] profiling
[ arthas@10829]$ profiler list
Bjasic events:
cpu
Alloc
Lock
Wall
Itimer
Perf events :
page -faults
context - switches
cycles
instructions
cache – references
cache- misses
branches
branch- mi sses
bus-cycles
L1-dcache- load-misses
LLC- load-misses
dTLB-load-misses
mem: breakpoint
trace: tracepoint
(arthas@18829]$
第一个是基本的事件,有cpu,有锁,有防火墙,等等。下面是其他的一些事件。这些都是profiler所支持的一些事件。
它默认的情况下就是第一个cpu的事件。这样可以显示所有它支持的事件。
如果想获取它现在到底已经采集了多少个样本,可以通过第三条命令:Profiler getsamples 获得样本,再按回车。这时候它就会获得16个样本。如下代码所示:
[ arthas@10829]$ profiler getSamples
16
( arthas@10829j$
随着时间的增长它获取的样本就会越来越多。
假设敲两次回车就会变成18个样本,所以时间越长它获取的样本就越多。如下代码所示:
( arthas@10829]$
p
rofiler getSamples
1
8
(arthas@10829)$
另外一条命令叫profiler status。这个命令有什么用呢?
它可以用来显示当前的获取的状态,如下图所示就会显示,它已经运行了158秒, 这个指的是cpu。如下代码所示:
[ arthas@10829]$ profiler status
[perf] profiling is running for 158 seconds
[ arthas@10829]$ profiler getSample
30
(arthas@10829]$
可以看出现在已经有30个样本。那这时候想要把它停止怎么做呢?
停止它就会生成样本的图。直接输入stop命令:Profiler stop,按回车,回车以后它就会停止,并且它会在如下这个目录下面生成一个svg的图片文件,它默认放在output目录下面。如下代码所示:
[ arthas@10829]$ profiler stop
profiler output file: /root/. arthas/lib/3.1.7/arthas/anthas outpu20200322-101225. Svg
OK
(arthas10829]
$
那怎么切换目录呢?
因为它是一个隐藏的文件,所以要先去找到这个文件,将这个文件复制出来,再切换一下目录,把上面的对勾勾上,它是客户端操作的,就可以进到相应的目录下。并且它是会跟随的。如下图所示:
如果现在要想进output的目录下面,这里面就有一个svg的图片,可以双击打开,按允许。就会发现它生成了如下这样的一张图,这个图就是它所生成的火焰图。
生成的火焰图它默认输出的是Svg的图片。如果想要生成的是Html文件怎么办?
它也可以指定生成HTML的文件。这时只需要在stop后面输入Format html,这是指它的格式,再指定为Html就可以了。如下代码所示:
(arthas@10829]$ profiler stop -format html
如果敲回车,可以看到它也是输出在同一个目录下面,但是它生成的是一个html的文件。如下代码所示:
[ arthas@10829]$ profiler stop --format html
profiler output file: /root . arthas/lib/3.1. 7/arthas/anthasoutput/20299322101458 htm
l
OK
rthas@10829]$
这时可以看有没有Output目录。在arthas里面寻找,会发现有一个svg的图片,也有个Html的文件。
如下图所示:
将这个文件双击打开。因为要看的是它的网页,所以假设使用google打开。
google所看到的结果是有一点区别的,它生成的是这样的一种格式,这就是它的采样,并且输出的是Html的格式。如下图所示:
四.火焰图的含义:
火焰图是基于perf结果产生的svg图片,用来展示cpu的调用线。
首先看到如下所示的火焰图:
它现在是展示cpu的调用站的。
从水平方向看,它的坐标是跟数学里面是不一样的,向右边这个方向是X方向,向下面这个方向是Y方向,圆点在左上角。在计算机里面都是这个方向是X这个方向是Y。
这里面怎么去看XY轴呢?
首先,Y轴方向表示调用的栈一级一级往下走一个栈。每一层实际上就是一个函数,调用栈越深,火焰就越高。顶部就是正在执行的函数,下面都是它的复函数。
X轴就表示抽样的数量。如果一个函数在X轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。
这里要注意的是,X轴它不是代表时间,而是所有调用栈合并后,按字母顺序进行排序。
火焰图主要是看顶层的函数,哪个函数占据的宽度最大,就表示这个函数是可能存在性能的瓶颈。只要有平顶那就表示它的时间是很耗时的。
而颜色没有特殊的含义,因为火焰图表示的是cpu的繁忙程度,所以一般选择暖色调。
这就是火焰图的含义。以后可以对它进行一个性能的分析,尽量不要出现平顶。
五.小结
1.首先第一个 profiler start 。这个是表示启动Profiler,在默认的情况下是生成Cpu的火焰图。
2.Profiler list是用来显示所有支持的事件。火焰图的生成,它在Linus电脑上可以,但是在windows下是不能生成的。
3.profiler getsamples 是用来获取已采集的样本sample的数量。
4.Profiler status 是用来获取或者查看profiler的状态,运行的时间。
5.Profiler stop 是用来停止 profiler 生产火焰图的结果,可以指定它的输出目录和输出的格式。输入格式有两种,一种是 svg 另一种是 Html。