结合 arthas idea 插件的基本玩法(常用)

背景

Arthas 官方的工具还不够足够的简单,需要记住一些命令,特别是一些扩展性特别强的高级语法,比如 ognl 获取 spring context 为所欲为,watchtrace 不够简单,需要构造一些命令工具的信息,因此只需要一个能够简单处理字符串信息的插件即可使用。当在处理线上问题的时候需要最快速、最便捷的命令,因此插件还是有存在的意义和价值的。

arthas idea plugin 更简单的使用 arthas 的 IDEA 插件,方便的构建各种 arthas 命令,复制到剪切板 然后到服务器上启动 arthas 执行命令

插件安装

可以直接去 idea 插件仓库下载安装 https://plugins.jetbrains.com/plugin/13581-arthas-idea/

操作说明

将光标放置在具体的类、字段、方法上面 右键选择需要执行的命令,部分会有窗口弹出、根据界面操作获取命令;部分直接获取命令复制到了剪切板 ,自己启动 arthas 后粘贴命令即可执行。

结合 arthas idea 插件的基本玩法(常用)_第1张图片

具体命令

由于手拼 arthas 的命令很长,很麻烦,所以插件作用的一方面就是帮我们生成这些命令,直接在 arthas 执行就好了。

以下命令都是借助 arthas idea 插件直接生成的,不用自己拼

结合 arthas idea 插件的基本玩法(常用)_第2张图片
结合 arthas idea 插件的基本玩法(常用)_第3张图片

1 查看具体类中方法的入参、出参、异常

比如 要查看以下方法的执行情况:

结合 arthas idea 插件的基本玩法(常用)_第4张图片

watch com.demo.meal.pc.MealManagerController listMealCategoryByOptions '{params,returnObj,throwExp}'  -n 5  -x 3 

也可根据条件表达式来观察,比如

## 判断当第一个请求参数为 1 的时候
watch com.demo.meal.pc.MealManagerController listMealCategoryByOptions '{params,returnObj,throwExp}'  "params[0]==1" -n 5 -x 3

结合 arthas idea 插件的基本玩法(常用)_第5张图片

2 trace 跟踪请求链路

trace com.demo.meal.pc.MealManagerController listMealCategoryByOptions  -n 5 --skipJDKMethod false 

3 查看调用栈

stack com.demo.meal.pc.MealManagerController listMealCategoryByOptions  -n 5 

结合 arthas idea 插件的基本玩法(常用)_第6张图片

4 监控方法执行情况

monitor com.demo.meal.pc.MealManagerController listMealCategoryByOptions  -n 10  --cycle 10 

结合 arthas idea 插件的基本玩法(常用)_第7张图片

5 反编译源码并显示行号

jad --source-only com.demo.meal.pc.MealManagerController listCategoryTrainByOptions 

6 查看 JVM 已加载的类信息

sc -d com.demo.meal.pc.MealManagerController

结合 arthas idea 插件的基本玩法(常用)_第8张图片

7 查看已加载类的方法信息

sm -d com.demo.meal.pc.MealManagerController listCategoryTrainByOptions

结合 arthas idea 插件的基本玩法(常用)_第9张图片

8 动态修改日志级别

先看一下当前日志信息

结合 arthas idea 插件的基本玩法(常用)_第10张图片

通过命令修改:

logger --name ROOT --level debug

结合 arthas idea 插件的基本玩法(常用)_第11张图片

9 dump 已加载类的 bytecode(.class文件) 到特定目录

dump com.demo.meal.pc.MealManagerController -d /Users/hh/logs/arthas/dump

10 生成火焰图

什么是火焰图? 怎么看懂?
参考:https://www.ruanyifeng.com/blog/2017/09/flame-graph.html

y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。
x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。
火焰图就是看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题。颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调。

## 采集 alloc 火焰图 30秒后自动结束
profiler start --event alloc --interval 10000000 --threads --format svg -duration 30 --threads
## 采集 CPU 火焰图 30秒后自动结束
profiler start --event cpu --interval 10000000 --threads --format svg -duration 30 --threads

结合 arthas idea 插件的基本玩法(常用)_第12张图片

参考

  • https://www.yuque.com/arthas-idea-plugin/help/pe6i45
  • https://www.yuque.com/arthas-idea-plugin/help
  • https://www.ruanyifeng.com/blog/2017/09/flame-graph.html

你可能感兴趣的:(java,arthas,debug)