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:
- 阿里云 Maven 镜像 : maven.aliyun.com/repository/...
- GitHub Releases : github.com/alibaba/art...
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 飙高,定位哪行代码问题
-
输入
dashboard确认 CPU 负载。 -
输入
thread -n 3查看最忙的前 3 个线程堆栈。 -
如果发现某个业务方法占用高,使用
trace追踪内部耗时:bashtrace 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
⚠️ 四、注意事项与安全建议
- 权限一致:运行 Arthas 的用户必须与目标 Java 进程用户一致(否则无法 Attach)。
- 性能影响 :
dashboard,thread,jvm等命令开销很小。trace,watch,monitor等涉及字节码增强的命令会有一定性能损耗 ,严禁在高并发核心链路长时间开启 。排查完立即使用stop命令或quit退出。- 可以使用
-x参数控制对象展开深度,避免打印过大对象导致 OOM。
- 安全性 :
- Arthas 功能极其强大(可执行任意代码、下载堆 dump),默认监听端口(3658)不要对公网开放。
- 生产环境建议配合防火墙,仅允许内网特定 IP 访问。
- 如果需要远程连接,可以使用
telnet或ssh隧道,不要直接暴露 Arthas Server。
- 卸载/停止 :
- 在 Arthas 控制台输入
quit只是断开当前连接,Agent 仍在目标进程中运行。 - 如果要完全关闭 Arthas,需在控制台输入
stop命令,或者直接重启 Java 应用。
- 在 Arthas 控制台输入
🔗 五、更多资源
- 官方文档(最权威) : arthas.aliyun.com/doc/
- Web 控制台 : Arthas 还支持 Spring Boot Admin 集成或通过
arthas-web进行浏览器访问(需额外配置)。
现在你可以尝试在服务器上运行 java -jar arthas-boot.jar 开始你的诊断之旅了!