ddos攻击|是谁在调用我?使用 arthas+jprofiler 做复杂链路分析

ddos攻击|是谁在调用我?使用 arthas+jprofiler 做复杂链路分析

文章图片

【ddos攻击|是谁在调用我?使用 arthas+jprofiler 做复杂链路分析】ddos攻击|是谁在调用我?使用 arthas+jprofiler 做复杂链路分析

文章图片


简介:Arthas 是阿里巴巴开源的应用诊断利器 , 提供了 profiler 命令 , 可以生成热点火焰图 。 通过采样录制调用链路来做性能分析 , 极大提升了线上排查性能问题的效率 。
背景
Arthas 是阿里巴巴开源的应用诊断利器 , 提供了 profiler 命令 , 可以生成热点火焰图 。 通过采样录制调用链路来做性能分析 , 极大提升了线上排查性能问题的效率 。
但是有一个问题 , 当 async-profiler 全量采样导出的 svg 文件太大时 , 想要找到关键的调用点 , 就非常困难 。
比如下图:


没有办法做聚合或过滤 , 这方面本地的 profiler 工具比如 jprofiler、yourkits 就方便很多 , 有没有办法将两者结合起来呢?
经过分析发现 , async-profiler 支持 jfr (Java Flight Recorder) 格式输出 , jprofiler 也支持打开 jfr 快照 , 成了!具体操作步骤如下:
1. arthas 采样生成 jfr 文件
启动 arthas 之后 , 执行以下采样命令:
profiler start -f /home/admin/yourAppName/target/arthas-output/%t.jfr -d 180

%t 表示当前时间 , -d 后面是采样秒数 , 更多参数参见:https://alibaba.github.io/arthas/profiler.htmlhttps://github.com/jvm-profiling-tools/async-profiler/blob/v1.6/src/arguments.cpp
2. 下载 jfr 到本地
可以用 oss 倒腾 , 或者 szrz 等其他途径倒腾到本地 。
3. jprofiler 分析
在做性能分析时我们常常想要找出:是谁在调用我 , 是谁调用我最多 。 下面举例介绍怎么做的 。
3.1 打开快照
使用 jprofiler 打开 jfr 文件 , 选择 Open a snapshot 打开之后选择 CPU views:


3.2 反向分析
View -> Find 查找要分析的类和方法 , 然后选择 Analyze -> Calculate Backtraces to Selected Method:


3.3 分析结果
修改 Summation mode 为 Total times , 即可看到这个方法被哪些上游调用到 , 调用量和占比 。


总结
  1. 通过 Arthas profiler 命令生成jfr文件;
  2. 在本地通过jprofiler来分析jfr文件 , 定位谁在调用我;
  3. 运用之妙 , 存乎一心 。 工具的互相结合 , 可以产生奇妙的化学反应 。
作者:羽涅
本文为阿里云原创内容 , 未经允许不得转载 。


    推荐阅读