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

背景

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

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

插件安装

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

操作说明

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

picture.image

具体命令

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

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

picture.image

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

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

picture.image

  
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  

picture.image

2 trace 跟踪请求链路

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

picture.image

3 查看调用栈

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

picture.image

4 监控方法执行情况

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

picture.image

5 反编译源码并显示行号

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

picture.image

6 查看 JVM 已加载的类信息

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

picture.image

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

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

picture.image

8 动态修改日志级别

先看一下当前日志信息

picture.image

通过命令修改:

  
logger --name ROOT --level debug  

picture.image

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  

picture.image

参考

0
0
0
0
评论
未登录
暂无评论