1. 什么是Arthas
Arthas是一款阿里开源的Java诊断工具,它可以在不修改代码的情况下,实时观察和修改Java应用程序的运行状态。Arthas支持命令行操作和图形化界面操作,可以帮助开发人员快速定位和解决线上问题。
2. Arthas能做什么
Arthas提供了丰富的功能,包括但不限于以下几个方面:
- 实时诊断:实时观察Java应用程序的运行状态,包括线程、类加载器、JVM参数、系统属性等信息,并且可对这些信息进行修改。
- 方法追踪:对Java应用程序的方法进行追踪,并且可以查看方法的参数、返回值、异常信息等。
- 热更新: 对Java应用程序的类进行热更新,即在不重启应用程序的情况下,替换已经加载的类。
- 堆转储: 对Java应用程序的堆进行转储,并且可以查看堆中对象的详细信息。
- 调试: 对Java应用程序进行调试,并且可以查看调试信息、修改变量值等。
3. Arthas的watch命令分析
在实际生产中,最常用的命令就是watch,希望通过以下示例,能够帮助读者快速上手arthas,并在实际生产中体会到arthas的好用、强大。如需参考Arthas的下载、安装、连接Java进程等操作请移步这里。
作用:追踪方法入参,返回值,异常状态
格式:watch 全路径类名 方法名 [可选参数]
命令:watch com.org.demo.controller.userController getUserInfo "{params,returnObj}" -n 1 -x 2 -b -s
解释:1. {params,returnObj,throwExp}: ognl表达式,表示观察指定入参和返回值
2. -n 1: 限定捕捉次数为1次
3. -x 2: 输出结果的遍历深度,因为结果可能是List
4. -b -s: 分别观察方法进入前、后的参数变化情况,不指定默认观察方法退出后
命令:watch com.org.demo.controller.userController getUserInfo "{params,throwExp}" -e
解释:1. -e:表示观察方法异常之后参数及异常情况
命令:watch com.org.demo.controller.userController getUserInfo "{params,returnObj}" "#cost>1000" -x 3
解释:1. #cost>1000:按耗时大于1000毫秒进行过滤
命令:watch com.org.demo.controller.userController getUserInfo "{params,returnObj}" 'params[0] == "test"'
解释:1. params[0] == "test": 按指定条件过滤
4. Arthas的其他常用命令
- dashboard:查看应用程序的概要信息
- help:查看帮助信息
- thread:查看线程信息
- jvm:查看JVM信息
- classloader:查看类加载器信息
- method:查看方法信息
- watch:监控方法调用
- trace:追踪方法调用
- jad:反编译类文件
- heapdump:转储堆信息
5. 总结
Arthas是一款非常强大的Java诊断工具,它可以帮助开发人员快速定位和解决线上问题。通过本文的介绍,相信读者已经对Arthas有了初步的了解,并且可以开始使用它来提高自己的开发效率。最后,Idea插件仓库中已经上线arthas插件,如果读者嫌arthas预发不够简单,可以尝试上手该插件,通过可视化操作获取对应命令并在arthas中执行。