Arthas
说明
Arthas 是一个开源的、针对 Java 应用程序的动态诊断工具,由 Alibaba 开源。它提供了丰富的功能来帮助开发者在线调试 Java 应用,无需重启服务即可实时监控与诊断问题,极大提升了生产环境中问题定位的效率。
文档
核心特性
- 类加载信息查询:可以查看已加载的类信息、搜索类、查看类加载器的树状结构等。
- 方法跟踪与诊断:允许你跟踪任意方法的调用路径、入参、返回值以及耗时,这对于性能瓶颈分析特别有用。
- 实时代码热更新:能够在不重启 JVM 的情况下修改类的字节码,实现方法内容的替换,这对于快速修复线上问题非常便利。
- 内存查看与分析:类似于
jmap
,但提供了更加友好的界面来分析堆内存使用情况,包括查找大对象、泄露对象等。 - 线程堆栈分析:可以方便地获取线程堆栈信息,帮助分析线程死锁和状态。
- 表达式求值:可以直接在运行中的 JVM 上执行 Java 表达式,并查看结果,这对于调试变量值非常有用。
- JVM 信息监控:查看 JVM 各种运行时信息,比如 GC 状态、编译情况、内存使用情况等。
使用步骤
- 下载:
curl -O https://arthas.aliyun.com/arthas-boot.jar
- 启动:在目标 Java 应用的服务器上,通过命令行启动 Arthas,通常命令为
java -jar arthas-boot.jar
- 连接:Arthas 会列出当前系统中所有运行的 Java 进程,你可以选择一个进程连接。
- 使用命令:连接后,就可以开始使用 Arthas 提供的各种命令进行诊断和分析了。
基础命令
- help—— 查看命令帮助信息
- cat—— 打印文件内容,和 linux 里的 cat 命令类似
- echo–打印参数,和 linux 里的 echo 命令类似
- grep—— 匹配查找,和 linux 里的 grep 命令类似
- tee—— 复制标准输入到标准输出和指定的文件,和 linux 里的 tee 命令类似
- pwd—— 返回当前的工作目录,和 linux 命令类似
- cls—— 清空当前屏幕区域
- session—— 查看当前会话的信息
- reset—— 重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
- version—— 输出当前目标 Java 进程所加载的 Arthas 版本号
- history—— 打印命令历史
- exit/quit—— 退出当前的连接
- stop—— 完全退出 arthas
- keymap——Arthas 快捷键列表及自定义快捷键
jvm 相关
- dashboard—— 当前系统的实时数据面板
- thread—— 查看当前 JVM 的线程堆栈信息
- jvm—— 查看当前 JVM 的信息
- sysprop—— 查看和修改 JVM 的系统属性
- sysenv—— 查看 JVM 的环境变量
- vmoption—— 查看和修改 JVM 里诊断相关的 option
- perfcounter—— 查看当前 JVM 的 Perf Counter 信息
- logger—— 查看和修改 logger
- getstatic—— 查看类的静态属性
- ognl—— 执行 ognl 表达式
- mbean—— 查看 Mbean 的信息
- heapdump——dump java heap, 类似 jmap 命令的 heap dump 功能
class/classloader 相关
sc—— 查看 JVM 已加载的类信息
1
sc -d com.bjtcrj.scm.system.controller.LoginController
sm—— 查看已加载类的方法信息
1
sm -d com.bjtcrj.scm.system.controller.LoginController validateLogin
jad—— 反编译指定已加载类[方法]的源码
1
jad com.bjtcrj.scm.system.controller.LoginController [方法]
mc—— 内存编译器,内存编译
.java
文件为.class
文件redefine—— 加载外部的
.class
文件,redefine 到 JVM 里dump——dump 已加载类的 byte code 到特定目录
classloader—— 查看 classloader 的继承树,urls,类加载信息,使用 classloader 去 getResource
monitor/watch/trace 相关
请注意,这些命令,都通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,请尽量明确需要观测的类、方法以及条件,诊断结束要执行
stop
或将增强过的类执行reset
命令。
monitor—— 方法执行监控
watch—— 方法执行数据观测
trace—— 方法内部调用路径,并输出方法路径上的每个节点上耗时
stack—— 输出当前方法被调用的调用路径
tt—— 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
1
tt -t -n 1000 com.bjtcrj.scm.system.controller.LoginController validateLogin
profiler / 火焰图
- profiler–使用 async-profiler 对应用采样,生成火焰图
options
- options—— 查看或设置 Arthas 全局开关
管道
Arthas 支持使用管道对上述命令的结果进行进一步的处理,如sm java.lang.String * | grep 'index'
- grep—— 搜索满足条件的结果
- plaintext—— 将命令的结果去除 ANSI 颜色
- wc—— 按行统计输出结果
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 王文哲的博客!