侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

我的火焰图安装笔记[red hat]

2023-11-02 星期四 / 0 评论 / 0 点赞 / 62 阅读 / 4583 字

最近接到1个任务,就是调研公司的业务框架接入zipkin之后,为啥CPU飙升。 靠猜测显然不行,那就用工具来说话,从武器库中找到 【火焰图】,下面开始研究怎么安装! =================

最近接到1个任务,就是调研公司的业务框架接入zipkin之后,为啥CPU飙升。

靠猜测显然不行,那就用工具来说话,从武器库中找到 【火焰图】,下面开始研究怎么安装!

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

http://www.brendangregg.com/perf.html --- 工具!

http://www.brendangregg.com/flamegraphs.html --- 根据任务类型选择对应的页面

http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html --- 解决CPU飙升的问题

http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html#Java --- 解决java的CPU飙升

http://www.brendangregg.com/FlameGraphs/cpu-bash-flamegraph.svg --- 作者给的1个示例

https://github.com/brendangregg/FlameGraph --- 参数控制!

=======================开始安装===========================

1)安装perf-map-agent

yum install cmakeexport JAVA_HOME=自己的java位置mkdir .perf-map-agentcd .perf-map-agent/git clone --depth=1 https://github.com/jvm-profiling-tools/perf-map-agentcd perf-map-agent/cmake .执行cmake的时候报错,如果你碰到了这个问题,自己解决,我是这么解决的===========================yum groupinstall "Development Tools"yum install make===========================make成功,如下图所示

2. profiling and flame graph generation

git clone --depth=1 https://github.com/brendangregg/FlameGraph --- 里面sudo bashperf record -F 49 -a -g -- sleep 30; ./FlameGraph/jmaps发现没有perf命令,在centos下执行下面的命令=================================================yum install perf*=================================================确保在自己的正确目录下,比如/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-3.b12.el7_3.x86_64/.flamegraph再次执行这个命令perf record -F 49 -a -g -- sleep 30; ./FlameGraph/jmaps

可以执行perf命令,但是报错了,错误如下:

perf record -F 49 -a -g -- sleep 30; ./FlameGraph/jmaps[ perf record: Woken up 1 times to write data ][ perf record: Captured and wrote 0.793 MB perf.data (5880 samples) ]ERROR: AGENT_HOME not set correctly; edit ./FlameGraph/jmaps and fix

先解决这个问题,打开jmaps,查看,原来它的默认文件夹和我的文件夹不是同1个

AGENT_HOME=/usr/lib/jvm/perf-map-agent  # from https://github.com/jvm-profiling-tools/perf-map-agent

修改成我的即可, 然后就不报错了,继续执行

perf record -F 49 -a -g -- sleep 30; ./FlameGraph/jmaps[ perf record: Woken up 1 times to write data ][ perf record: Captured and wrote 0.786 MB perf.data (5880 samples) ]Fetching maps for all java processes...Mapping PID 12196 (user root):wc(1):  10973  33604 806238 /tmp/perf-12196.map

 

perf script > out.stacks01cat out.stacks01 | ./FlameGraph/stackcollapse-perf.pl | grep -v cpu_idle | /    ./FlameGraph/flamegraph.pl --color=java --hash > out.stacks01.svg

然后就生成了下面的图

 

3 精细化参数控制

https://github.com/brendangregg/FlameGraph

=================命令参数解析===================

perf record -F 99 -a -g -- sleep 60; ./FlameGraph/jmaps 

--- -F 99  --- 采样频率  99赫兹

--- -a  --- 采样所有进程

--- 60是 60秒的意思

如果仅仅只针对某个进程采样,命令如下:

perf record -F 99 -p 进程ID  -g -- sleep 60; ./FlameGraph/jmaps 

 

4 新的问题

没有显示代码的顶层栈,奇怪,找文章看,只要在JVM启动参数里加上

 -XX:+PreserveFramePointer  --- 加上这个选项,再测试看看

顺便也加上这个  -XX:+NoOmitFramePointer

果然可以了,效果如下。

右下角还可以看到占比56.8%

 

广告 广告

评论区