关于对运行中的项目做java监测的需求下,Arthas则是一个很好的解决方案。
我们可以用来
1.监控cpu 现成、内存、堆栈
2.排查cpu飚高 造成原因
3.接口没反应 是否死锁
4.接口慢优化
5.代码未按预期执行 是分支不对 还是没提交?
6.线上低级错误 能不能不重启下 热部署 、类替换
一、简介
Arthas 是阿里开源的 Java 诊断工具,深受开发者喜爱。在线排查问题,无需重启;动态跟踪 Java 代码;实时监控 JVM 状态。Arthas 支持 JDK 6+,支持 Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。
二、安装
要安装 Arthas 工具,可以按照以下步骤进行:
-
访问 Arthas 的 GitHub 仓库:Arthas GitHub。
-
根据操作系统,选择下载最新版本的 Arthas 工具,这是中文官网https://arthas.aliyun.com。
-
解压下载的文件到希望存放 Arthas 的目录。
-
打开命令行窗口,并进入到解压后的 Arthas 目录。
-
执行
./as.sh
(Linux/Mac)或as.bat
(Windows)启动 Arthas 工具。
现在,成功安装了 Arthas 工具,可以开始使用它来进行 Java 诊断了。
Windows为例 找到对应的下载解压后的目录,执行cmd,java -jar arthas-boot.jar
这里会展示启动arthas之前的正在运行的项目,想要查看哪个项目就可以直接输入序号 例:3
看到logo后则表示已经Attach成功,就可以接着执行对应命令来进行检测等操作。
三、命令
1. help
: 查看帮助文档,列出所有可用命令。可以使用 help <command>
获取特定命令的详细说明。
2. dashboard
: 显示实时的 JVM 仪表盘,提供内存、线程、GC 等关键信息的概览。这有助于快速了解应用程序的运行状况。
3. thread
: 查看线程信息和线程堆栈。可以使用此命令来分析线程的运行状态,识别死锁或性能瓶颈。
-
示例:
thread
命令可以列出所有线程,并显示每个线程的 ID、状态、名称和堆栈信息。 -
用法:
thread
: 列出所有线程。thread -n 10
: 列出前 10 个线程。thread -b
: 列出所有阻塞的线程。thread <threadId>
: 查看指定线程的详细信息。
4. heapdump
: 生成 Java 堆转储文件,用于分析内存使用情况。这对于排查内存泄漏或内存溢出问题非常有用。
-
示例:
heapdump
命令可以生成一个堆转储文件,包含了应用程序在当前时刻的内存快照。 -
用法:
heapdump
: 生成一个堆转储文件,默认保存到当前目录。heapdump -f /tmp/heapdump.hprof
: 指定堆转储文件的保存路径和文件名。
5. watch
: 实时监控方法的调用次数、耗时等。可以使用此命令来观察方法的执行效率,识别性能瓶颈。
-
示例:
watch
命令可以监控指定方法的调用次数、耗时、参数和返回值等信息。 -
用法:
watch -E 'executionTime' -n 10 'com.example.MyService.processOrder(*)'
: 监控com.example.MyService.processOrder()
方法的执行时间,每 10 次调用输出一次统计结果。watch -E 'returnValue' -n 5 'com.example.MyService.processOrder(String, int)'
: 监控com.example.MyService.processOrder(String, int)
方法的返回值,每 5 次调用输出一次结果。
6. trace
: 跟踪方法的调用,包括参数和返回值。这有助于理解方法的执行流程,定位问题根源。
-
示例:
trace
命令可以跟踪指定方法的调用流程,包括参数、返回值、调用栈信息等。 -
用法:
trace com.example.MyService.processOrder(*)
: 跟踪com.example.MyService.processOrder()
方法的调用流程。
7. sc <class>
: 查看指定类的代码。
-
示例:
sc
命令可以查看指定类的源代码,方便理解代码逻辑。 -
用法:
sc com.example.MyService
: 查看com.example.MyService
类的源代码。
8. redefine <class>
: 动态修改指定类的代码,无需重启应用程序。
-
示例:
redefine
命令可以动态修改指定类的代码,方便快速验证代码修改效果。 -
用法:
redefine com.example.MyService
: 动态修改com.example.MyService
类的代码。
9. jvm
: 查看 JVM 的运行参数和状态。
-
示例:
jvm
命令可以查看 JVM 的运行参数和状态,可以了解 JVM 的运行情况。 -
用法:
jvm
: 查看 JVM 的基本信息。jvm -D
: 查看 JVM 的系统属性。jvm -X
: 查看 JVM 的运行参数。
10. ognl <expression>
: 使用 OGNL 表达式访问对象属性。
11. jad <class>
: 反编译指定类的 Java 字节码。
-
示例:
jad
命令可以反编译指定类的 Java 字节码,方便查看类的代码结构。 -
用法:
jad com.example.MyService
: 反编译com.example.MyService
类的字节码。
四、总结
1. 线上问题排查利器: Arthas 的强大功能可以帮助您快速定位和解决线上问题,例如:
- 性能问题: 使用
watch
和trace
命令分析方法的执行时间和调用次数,识别性能瓶颈。 - 内存问题: 使用
heapdump
命令生成堆转储文件,分析内存泄漏或内存溢出问题。 - 线程问题: 使用
thread
命令查看线程状态和堆栈,识别死锁或线程阻塞问题。 - 代码问题: 使用
sc
命令查看类和方法的代码,帮助您理解代码逻辑并定位问题。
2. 提高开发效率: Arthas 不仅是排查问题的工具,还可以提高开发效率,例如:
- 快速定位问题: 使用
trace
和watch
命令快速定位问题代码,减少调试时间。 - 动态修改代码: 使用
redefine
命令动态修改代码,无需重启应用程序,方便快速验证代码修改效果。 - 查看运行时数据: 使用
dashboard
和jvm
命令查看运行时数据,帮助您了解应用程序的运行状态。
3. 学习和探索: Arthas 是学习和探索 Java 运行时的绝佳工具,例如:
- 深入了解 JVM: 使用
jvm
命令查看 JVM 的运行参数和状态,加深对 JVM 的理解。 - 学习 Java 代码: 使用
sc
命令查看类和方法的代码,学习 Java 代码的实现细节。 - 探索 Java 运行时: 使用
ognl
和jad
命令探索 Java 运行时环境,了解 Java 运行时的内部机制。
总而言之,Arthas 是一款功能强大的工具,可以帮助有效地诊断和监控 Java 应用程序,提高开发效率。
四、Idea插件
idea也有现成的Arthas插件,可以有效的帮我们生成命令。
可以右键方法,生成命令到剪贴板里面。