arthas火焰图
1.使用
使用逻辑为,采样开始–执行被测试动作–采样结束–分析
可以进入arthas内部使用,也可以直接调用脚本(-d 指定采样时间,-e 指定采样内容为内存占用,3456为PID号)
profiler.sh -d 30 -e alloc -f profile.svg 3456
复制代码
采样方法
- 启动,默认采样信息为CPU可以通过–event进行指定
支持的分析动作包括CPU,内存,锁等cpu, alloc, lock, cache-misses
$ profiler start
Started [cpu] profiling
复制代码
- 查看状态
$ profiler status
[cpu] profiling is running for 4 seconds
复制代码
- 结束采样,会看到文件存放位置
profiler stop
复制代码
- 简化命令
profiler start --duration 30 --file profile.svg --event alloc --d 306954
复制代码
2.分析
分析思路总结只有一句话:火焰图里,横条越长,代表使用的越多,从下到上是调用堆栈信息
越宽表示被调用越多执行时间长,越高表示调用栈越深
火焰图就是看顶层的哪个函数占据的宽度最大。只要有”平顶”(plateaus),就表示该函数可能存在性能问题。
支持操作
点击
在某一层点击,火焰图会水平放大,该层会占据所有宽度,显示详细信息,左上角可以reset
悬浮
火焰的每一层都会标注函数名,鼠标悬浮时会显示完整的函数名、抽样抽中的次数、占据总抽样次数的百分比。下面是一个例子
搜索
按下 Ctrl + F 会显示一个搜索框,直接搜索函数,支持正则
实例
上面图片中,最顶层的函数g()
占用 CPU 时间最多。d()
的宽度最大,但是它直接耗用 CPU 的部分很少。b()
和c()
没有直接消耗 CPU。因此,如果要调查性能问题,首先应该调查g()
,其次是i()
。
另外,从图中可知a()
有两个分支b()
和h()
,这表明a()
里面可能有一个条件语句,而b()
分支消耗的 CPU 大大高于h()
。
3.常用命令
# 内存分配
./profiler.sh -d 10 -e alloc -f output-alloc.svg -t 1786
# cpu
./profiler.sh -d 10 -e cpu -f output-cpu.svg --all-user 1786
# trace 方法
./profiler.sh -d 10 -e hotMethod1 -f output-method.svg --all-user 1786
# cpu
./profiler.sh -d 10 -f output-cpu.svg --all-user 1786
#时钟信号
./profiler.sh -d 10 -e wall -f output-wall.svg -t 1786
# 支持的命令
./profiler.sh list 1786
#帮助文档
./profiler.sh
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END