Arthas(阿尔萨斯)是Alibaba开源的Java诊断性能监控分析工具,它不需要做任何的参数配置,就可以直观的获取各种维度的性能数据。通过阅读官网的介绍,可以看到,当我们遇到以下类似问题而束手无策时,Arthas可以帮助我们解决:
Arthas支持JDK 6+,支持Linux/Mac/Winodws,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。
使用arthas-boot推荐安装方式,下载arthas-boot.jar,然后用java -jar的方式启动:
获取arthas
wget https://alibaba.github.io/arthas/arthas-boot.jar
https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar --repo-mirror aliyun --use-http
wget https://arthas.gitee.io/arthas-boot.jar
启动arthas
java -jar arthas-boot.jar
查看帮助信息
java -jar arthas-boot.jar -h
第一次使用arthas时,会自动下载一些依赖包,等待下载完成,就会进入到arthas提供的命令行界面。
dashboard命令可以查看当前系统的实时数据面板。
图表说明
输入 Q 或者 Ctrl+C 可以退出dashboard命令。
查看当前线程信息,查看线程的堆栈,thread 1 命令会打印线程ID 1的栈。
同样,Arthas支持管道,可以用 thread 1 | grep 'main(' 查找到main class。如下,可以看到main class是demo.MathGame。
参数说明
查看JVM已加载的类信息,搜索出所有已经加载到 JVM 中的 Class 信息。
sc -d *MathGame
参数说明
反编译指定已加载类的源码,可以通过 jad 命令来反编译代码,jad 命令将 JVM 中实际运行的 class 的 byte code 反编译成 java 代码,便于你理解业务逻辑。
jad demo.MathGame
默认情况下,反编译结果里会带有ClassLoader信息,通过--source-only选项,可以只打印源代码。方便和mc/redefine命令结合使用。输入 Q 或者 Ctrl+C 退出watch命令。
参数说明
查看当前JVM信息
方法内部调用路径,并输出方法路径上的每个节点上耗时,trace 命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。
我们可以看到 “---[0.128988ms] java.io.PrintStream:println() #28”耗时较长。
参数说明
输出当前方法被调用的调用路径,很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多,或者你根本就不知道这个方法是从那里被执行了,此时你需要的是 stack 命令。
参数说明
更多详细介绍,可阅读Arthas 用户文档 — Arthas 3.1.1 文档
领取专属 10元无门槛券
私享最新 技术干货