arthas
是 Alibaba 开源的 Java 诊断工具,它的特点是使用方便,功能强大。最重要的是,arthas
可以监察生产环境下的项目,使用的过程无需重启项目。
官方文档:https://alibaba.github.io/arthas
一、安装
第1步, 下载 arthas-boot.jar 文件:https://arthas.aliyun.com/arthas-boot.jar
第2步, 为了测试运行,在本地系统运行一个Java程序,比如在 IDEA 中写一个死循环并运行:
第3步, 打开cmd
,进入arthas-boot.jar
所在目录,执行命令
java -jar arthas-boot.jar
随后选择需要挂载的 Java 程序,这里我们要监控的是 Test3 这个类,所以在控制台输入1
并回车。
等到出现以下 arthas
的图案,就说明运行成功了。
二、常用命令
2.1 dashboard 命令
可以直观的看到当前Java程序的线程CPU情况和状态,以及内存占用最多的对象信息
2.2 thread 命令
列出当前Java程序中的所有线程的信息。
thread
列出死锁线程的信息:
thread -b
2.3 jvm 命令
列出虚拟机相关信息,例如GC算法类型
[arthas@14500]$ jvm
...
...
----------------------------------------------------------------------------COMPILATION
----------------------------------------------------------------------------NAME HotSpot 64-Bit Tiered CompilersTOTAL-COMPILE-TIME 1306[time (ms)]----------------------------------------------------------------------------GARBAGE-COLLECTORS # 当前JVM使用了什么垃圾回收器
----------------------------------------------------------------------------PS Scavenge name : PS Scavenge[count/time (ms)] collectionCount : 12collectionTime : 101PS MarkSweep name : PS MarkSweep[count/time (ms)] collectionCount : 3collectionTime : 306
2.4 jad 命令
它是一个在线反编译指令。
反编译在某些情况下还是有用的,比如当团队编写的代码无误,但是项目上线后却发现代码输出错误,那么这时候就可以使用jad
在线反编译某个文件,查看它最终的代码,从而定位问题所在。
2.5 redefine(在线修改class)
它支持在线重新加载某个class文件,这样就避免了需要项目重启带来的风险!
在生产环境中,不可以随意停止程序。当生产环境出现了某些低级错误(比如某个变量名字写错成其他变量,或数值由0改成了1)时,可以通过redefine
命令来在线修改class
文件,从而临时解决掉这个低级错误。但这种解决方式是在内存层面上修改了class文件,等到项目重新启动时就会丢失更新。
因此,等到下次部署项目前,再在原项目中修改掉这个bug即可。
2.6 trace 命令
trace 包名 方法名
作用是:在方法调用链中,追踪某个方法A的运行时长。
它会显示方法A的调用情况,比如显示调用了方法B——耗时10ms,调用了方法C——耗时2000ms,在这个例子中,方法C很可能就是有问题的方法,因为它的调用时间太长了。