Arthas 是一款强大的 Java 诊断和调试工具,它能够在生产环境中实时诊断 Java 应用,提供强大的调试功能,帮助开发者和运维人员解决各种 Java 应用的性能问题和调试挑战。本指南将介绍如何在 Docker 环境中使用 Arthas 进行实战。

 官方文档

 GitHub地址

 gitee地址

应用场景

  1. 性能分析与优化: Arthas 可以帮助开发者监控应用程序的性能,找出性能瓶颈并进行优化。通过命令行工具,可以实时查看方法执行时间、CPU 使用情况、内存占用等性能数据。
  2. 线上问题排查: 在生产环境中,当应用出现问题时,Arthas 可以帮助快速定位问题。通过查看线程堆栈、监控方法执行情况、分析内存使用等,可以迅速定位到导致问题的代码段。
  3. 动态调试: Arthas 支持在运行中的 Java 应用中进行动态调试。可以实时修改代码、查看变量值、执行方法,帮助开发者理解程序运行状态。
  4. 类加载与类信息查看: 可以查看已加载的类信息,包括类的字段、方法、构造函数等。这对于理解应用的类加载情况和代码结构很有帮助。
  5. 实时监控: Arthas 提供了一些监控命令,可以实时查看应用的运行状态,包括线程数、类加载信息、堆内存使用等。
  6. 故障模拟: 在开发和测试阶段,可以使用 Arthas 模拟一些异常场景,例如模拟某个方法抛出异常,以便测试系统在异常情况下的行为。
  7. 代码热替换: Arthas 支持热替换 Java 类,可以在不停止应用的情况下修改和更新类文件,加速开发调试过程。
  8. 监控方法调用链: 可以通过 trace 命令监控指定方法的调用链,方便了解方法的调用情况,帮助定位问题。
  9. 内存分析: Arthas 提供了一些命令用于查看 JVM 的内存使用情况,包括堆内存、非堆内存等,有助于及时发现内存泄漏等问题。
  10. 应用容器中的诊断: Arthas 支持与容器技术集成,例如 Docker,通过 Docker 插件可以在容器中使用 Arthas 对 Java 应用进行诊断和调试。

服务端搭建

1. 拉取 Arthas 服务端镜像

# 拉取 Arthas 服务端容器镜像
docker pull arthas/arthas-server
  • 1.
  • 2.

2. 启动 Arthas 服务端容器

# 启动 Arthas 服务端容器,并将 3658 端口映射到宿主机
docker run -d -p 3658:3658 --name arthas-server arthas/arthas-server
  • 1.
  • 2.

客户端连接

1. 下载 Arthas 客户端

# 下载 Arthas 客户端
curl -O https://arthas.aliyun.com/arthas-boot.jar
  • 1.
  • 2.

2. 连接到运行中的容器

# 连接到容器
java -jar arthas-boot.jar --target-ip <服务器IP> --target-port 3658
  • 1.
  • 2.

替换 <服务器IP> 为你的服务器实际 IP 地址,3658 为 服务器上运行的端口号。

3. 进入 Arthas 命令行

成功连接后,你将进入 Arthas 的命令行界面。在这里,你可以使用各种 Arthas 命令进行诊断和调试。

常用分析

1. 查看类加载信息

# 查看类加载信息
$ classloader
  • 1.
  • 2.

2. 监控方法执行时间

# 监控方法执行时间
$ watch com.example.service.UserService getUser
  • 1.
  • 2.

3. 分析线程栈信息

# 查看线程栈信息
$ thread
  • 1.
  • 2.

4. 查看方法调用堆栈

# 查看方法调用堆栈
$ trace com.example.service.UserService getUser
  • 1.
  • 2.

5. 查看堆内存使用情况

# 查看堆内存使用情况
$ dashboard
  • 1.
  • 2.

6. 监控指定方法的入参和返回值

# 监控指定方法的入参和返回值
$ watch com.example.service.UserService getUser '{params,returnObj,throwExp}'
  • 1.
  • 2.

7. 查看当前系统负载情况

# 查看当前系统负载情况
$ sysmonitor
  • 1.
  • 2.

8. 查看当前活动线程情况

# 查看当前活动线程情况
$ thread --state
  • 1.
  • 2.

9. 查看 JVM 运行时信息

# 查看 JVM 运行时信息
$ dashboard --name dashboard
  • 1.
  • 2.

10. 查看 Java 进程的启动参数

# 查看 Java 进程的启动参数
$ vmoption
  • 1.
  • 2.

11. 退出 Arthas

在 Arthas 命令行中,输入 quitexit 可以退出 Arthas 工具。

通过这个 Docker Arthas 实战指南,你将学会如何在容器环境中使用 Arthas 进行 Java 应用的实时诊断和调试。希望这对提升你的 Java 应用调试能力有所帮助!