Arthas 是阿里巴巴开源的一款 Java 诊断工具,特别适合用来排查和诊断线上问题。它支持多种功能,例如方法跟踪、内存分析、线程诊断等,是解决线上故障的一把利器。Arthas 通过命令行界面与用户交互,可以方便地对运行中的 Java 进程进行实时监控和调试,而无需停止进程。

Arthas 功能

Arthas 提供以下主要功能:

  • Class 相关
    • classloader:查看 ClassLoader 的结构及类的加载情况。
    • jad:反编译指定的类,直接查看源代码。
    • mc:列出方法调用的详细信息。
    • sc:查看当前 JVM 加载的所有类及其相关信息。
  • Thread 相关
    • thread:查看当前线程的堆栈信息、线程状态。
  • JVM 监控
    • dashboard:显示当前 JVM 的 CPU、内存等实时信息。
    • heapdump:生成堆内存快照用于分析内存问题。
  • Monitor 和 Tracing
    • trace:方法调用跟踪,查看某个方法的详细执行情况,及调用链信息。
    • watch:监听并打印方法调用的输入输出和返回值。
    • monitor:监控某个方法的性能指标,如每秒调用次数、平均耗时等。

Arthas 的使用场景

  1. 定位方法执行异常:通过 trace、watch 等命令,可以跟踪方法执行过程,找出潜在的性能瓶颈或者业务逻辑错误。
  2. 线程问题排查:通过 thread 命令,可以查看系统中各个线程的状态,定位死锁、阻塞等问题。
  3. 类加载问题排查:classloader 和 jad 命令可以帮助你查看类加载器以及类的具体实现,便于调试类冲突、类加载异常等问题。
  4. 内存问题诊断:通过 heapdump、dashboard 等命令查看 JVM 内存使用情况,定位内存泄露问题。

Arthas 安装与启动

1. 快速安装

方式一:自动安装

你可以使用以下一行命令来安装和启动 Arthas:

方式二:手动下载

也可以手动从官网下载 arthas-boot.jar,然后使用 java -jar 启动。

2. 启动 Arthas

启动成功后,会显示当前机器上的所有 Java 进程,类似如下:

你可以输入数字选择你要诊断的 Java 进程。选择后,会进入 Arthas 命令行界面。

3. Arthas 常用命令

1. dashboard:查看系统实时性能信息

该命令用于查看 JVM 的实时数据,如线程数、内存使用、GC 情况等。

输出示例:

2. thread:线程诊断

显示当前 JVM 中所有线程的信息,包括线程栈、状态、CPU 使用率等。可以用于排查死锁、线程阻塞等问题。

你还可以查看某个特定线程的堆栈:

3. sc:查看已加载的类信息

输出示例:

4. trace:方法执行耗时跟踪

trace 命令用于跟踪某个方法的执行情况,输出该方法执行的耗时和调用链信息,适用于排查性能瓶颈。命令格式如下:

输出示例:

5. watch:方法调用输入输出监控

watch 命令用于监控方法的输入参数、返回值和异常信息。例如,你想查看 sayHello 方法的返回值,可以使用如下命令:

输出示例:

6. jad:反编译指定类

jad 命令用于反编译 JVM 加载的类,查看其源代码。命令格式如下:

输出示例:

7. heapdump:生成堆内存快照

当你怀疑内存泄漏或其他内存相关问题时,可以使用 heapdump 命令来生成堆快照进行分析。

结束 Arthas 会话

在 Arthas 命令行下输入 exit,即可退出当前会话。

总结

Arthas 提供了丰富的命令来解决 JVM 应用中的各种问题,从性能监控、线程分析到内存诊断等。通过合理使用这些命令,能够快速有效地解决 Java 应用中的各种疑难杂症。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注