Arthas 安装与使用全流程教程

Arthas 是阿里巴巴开源的 Java 诊断利器,特别适合线上环境 无需重启服务即可进行动态追踪、方法监控、JVM 状态分析等。相比传统的 jstack/jmap,Arthas 提供了更友好的交互界面和更强大的功能(如热更新代码、调用链追踪)。

以下是 2026年最新版 Arthas 在 Linux 服务器上的安装与使用全流程教程


🚀 一、安装 Arthas

Arthas 支持在线安装 (推荐)和离线安装两种方式。

方式 1:在线安装(推荐,需服务器能访问外网)

这是最简单的方式,只需下载一个 arthas-boot.jar,它会自动下载最新版本的 Arthas。

1. 下载安装脚本

在终端执行以下命令(确保当前目录有写权限):

bash 复制代码
# 创建目录(可选)
mkdir -p ~/arthas && cd ~/arthas

# 下载 arthas-boot.jar (阿里云镜像,速度快)
curl -O https://arthas.aliyun.com/arthas-boot.jar

# 或者使用官方 GitHub 地址
# curl -O https://github.com/alibaba/arthas/releases/download/3.7.4/arthas-boot.jar

2. 启动 Arthas

直接运行 jar 包,它会自动列出当前用户下所有的 Java 进程供你选择:

bash 复制代码
java -jar arthas-boot.jar

输出示例:

text 复制代码
[INFO] arthas-boot version: 3.7.4
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 2076 /opt/app/my-app.jar
  [2]: 3452 /opt/app/other-app.jar

输入对应的序号(如 1),回车后即可进入 Arthas 交互界面。


方式 2:离线安装(适用于无外网的生产环境)

如果服务器无法访问外网,需要在有网的机器下载完整包,上传到服务器。

1. 下载完整包

在有网的机器上下载最新版的 arthas-packaging-bin.zip

2. 上传并解压

将下载的 zip 包上传到 Linux 服务器(如 /opt/arthas),然后解压:

bash 复制代码
unzip arthas-packaging-3.7.4-bin.zip -d /opt/arthas
cd /opt/arthas

3. 启动

使用自带的 as.sh 脚本启动(比 arthas-boot.jar 更适合离线环境):

bash 复制代码
./as.sh

注意:如果提示 telnet 未安装,Arthas 可能会建议改用 java -jar arthas-core.jar 方式,或者安装 telnet (yum install telnet)。


🛠️ 二、常用核心命令速查

进入 Arthas 界面后(提示符为 [arthas@2076]$),你可以使用以下命令。按 Tab 键可以自动补全命令。

1. 帮助与概览

命令 说明
help 查看帮助文档
version 查看 Arthas 版本
session 查看当前会话信息
quit / exit 退出 Arthas(不会停止目标 Java 进程

2. 查看 JVM 基础信息 (替代 jstat/jinfo)

命令 说明 示例
dashboard 仪表盘,实时显示线程、内存、GC、CPU 概况(类似 top)。 dashboard
thread 查看线程信息。 thread (所有线程)thread -n 3 (CPU 占用最高的 3 个线程)thread -b (查找阻塞死锁的线程)
jvm 查看 JVM 详细信息(内存、GC、属性、参数)。 jvm
memory 查看内存各区域使用情况。 memory
gc 查看 GC 统计信息。 gc

3. 类与方法诊断 (核心功能)

命令 说明 示例
sc (S earch Class) 搜索类。 sc *UserService*``sc -d com.example.MyService (查看详情)
sm (S earch Method) 搜索方法。 sm com.example.MyService *
jad (J ava D ecompiler) 反编译线上代码,查看实际运行的源码(排查代码不一致神器)。 jad com.example.MyService doSomething
getstatic 获取类的静态字段值。 getstatic com.example.Config MAX_COUNT

4. 动态追踪与监控 (最强大功能)

命令 说明 示例
watch 观察方法的入参、返回值、异常、耗时。 watch com.example.UserService getUser '{params, returnObj}' -x 3``-x 3 表示展开对象深度为 3
trace 追踪方法内部调用路径,定位性能瓶颈(哪个子方法慢)。 trace com.example.UserService getUser 'cost > 100' (只打印耗时>100ms 的请求)
monitor 监控方法调用的统计数据(QPS, 平均耗时, 失败率)。 monitor -c 5 com.example.UserService getUser (每 5 秒统计一次)
tt (T ime Tunnel) 记录方法调用快照,可回放参数。 tt -t com.example.UserService getUser``tt -l (列出快照)tt -i 1000 -p (重放 ID 为 1000 的调用)

5. 高级操作

命令 说明 示例
redefine 热更新 代码!上传修改后的 .class 文件,替换线上运行代码(无需重启)。 redefine /tmp/MyService.class
ognl 执行 OGNL 表达式,操作对象实例(如修改静态变量、调用方法)。 ognl '@com.example.Config@MAX_COUNT'``ognl '@com.example.Util@method("arg")'
heapdump 导出堆内存快照(类似 jmap -dump)。 heapdump /tmp/dump.hprof
logger 动态修改日志级别(如临时开启 DEBUG 日志)。 logger -n com.example.UserService --level debug

💡 三、典型排查场景实战

场景 1:线上 CPU 飙高,定位哪行代码问题

  1. 输入 dashboard 确认 CPU 负载。

  2. 输入 thread -n 3 查看最忙的前 3 个线程堆栈。

  3. 如果发现某个业务方法占用高,使用 trace 追踪内部耗时:

    bash 复制代码
    trace com.example.OrderService createOrder 'cost > 50'

    观察输出,看时间消耗在哪个子方法或数据库调用上。

场景 2:接口返回数据不对,想看入参和返回值

使用 watch 命令:

bash 复制代码
# 观察 getOrder 方法,打印入参(params) 和 返回值(returnObj),展开深度 3
watch com.example.OrderService getOrder '{params, returnObj}' -x 3

发起一次请求,Arthas 会立即在控制台打印出详细的 JSON 数据。

场景 3:怀疑线上代码和本地不一致

使用 jad 反编译:

bash 复制代码
jad com.example.OrderService createOrder

将输出的代码复制到本地对比,确认是否发布了旧版本代码。

场景 4:临时开启某个包的 Debug 日志

不用重启改配置文件,直接用 logger

bash 复制代码
logger -n com.example.order --level debug

观察完问题后,记得改回 info:logger -n com.example.order --level info


⚠️ 四、注意事项与安全建议

  1. 权限一致:运行 Arthas 的用户必须与目标 Java 进程用户一致(否则无法 Attach)。
  2. 性能影响
    • dashboard, thread, jvm 等命令开销很小。
    • trace, watch, monitor 等涉及字节码增强的命令会有一定性能损耗严禁在高并发核心链路长时间开启 。排查完立即使用 stop 命令或 quit 退出。
    • 可以使用 -x 参数控制对象展开深度,避免打印过大对象导致 OOM。
  3. 安全性
    • Arthas 功能极其强大(可执行任意代码、下载堆 dump),默认监听端口(3658)不要对公网开放
    • 生产环境建议配合防火墙,仅允许内网特定 IP 访问。
    • 如果需要远程连接,可以使用 telnetssh 隧道,不要直接暴露 Arthas Server。
  4. 卸载/停止
    • 在 Arthas 控制台输入 quit 只是断开当前连接,Agent 仍在目标进程中运行。
    • 如果要完全关闭 Arthas,需在控制台输入 stop 命令,或者直接重启 Java 应用。

🔗 五、更多资源

  • 官方文档(最权威) : arthas.aliyun.com/doc/
  • Web 控制台 : Arthas 还支持 Spring Boot Admin 集成或通过 arthas-web 进行浏览器访问(需额外配置)。

现在你可以尝试在服务器上运行 java -jar arthas-boot.jar 开始你的诊断之旅了!

相关推荐
JavaGuide2 小时前
美团面试:为什么要用分布式缓存?本地缓存呢?多级缓存一致性如何保证?
数据库·redis·后端·缓存·大厂面试
JavaGuide2 小时前
为什么要用分布式缓存?本地缓存呢?多级缓存一致性如何保证?
redis·后端
yuanlaile2 小时前
2026后端趋势:Java 老了?Go 才是未来?
java·后端·golang·go与java·后端学什么
我爱娃哈哈2 小时前
SpringBoot + 事件溯源 + CQRS:高一致性与高性能读写分离架构
后端
Java水解2 小时前
Go map 底层原理
后端
南方的耳朵3 小时前
Linux 创建 TAP 类型虚拟设备的命令
后端
Volunteer Technology3 小时前
架构面试场景题(二)
面试·职场和发展·架构
Volunteer Technology3 小时前
mysql面试场景题(二)
android·mysql·面试
掘金码甲哥3 小时前
MetalLB才是给Ingress这个老登做负重前行的那个男人
后端