Arthas 全面使用指南:离线安装 + Docker/K8s 集成 + 集中管理
Arthas(阿尔萨斯)——Java 应用的线上诊断“瑞士军刀”
一、什么是 Arthas?
Arthas 是阿里巴巴开源的一款 Java 线上诊断工具,能够在不重启、不修改代码的情况下,实时监控和诊断生产环境中的 Java 应用。
🔍 它能帮你解决这些问题:
- 这个类是从哪个 jar 包加载的?为什么报
ClassNotFoundException
? - 我改的代码怎么没生效?是不是分支错了?
- 线上某个用户请求出错,但无法 debug,日志也不够?
- 接口响应慢,到底哪里卡住了?
- 如何查看 JVM 实时内存、线程、GC 状态?
- 如何生成火焰图定位性能热点?
- 怎样从 JVM 内部直接调用方法或获取对象实例?
✅ Arthas 支持 JDK 8+(推荐),支持 Linux/Mac/Windows,采用命令行交互,Tab 补全强大,诊断效率极高。
二、离线安装 Arthas(推荐生产环境使用)
由于生产环境通常禁止外网访问,推荐使用离线方式安装 Arthas。
官方文档:https://arthas.aliyun.com/doc/
✅ 步骤 1:下载arthas全量包
下载arthas全量包、安装
浏览器输入网址下载:
https://github.com/alibaba/arthas/releases/download/arthas-all-4.0.5/arthas-bin.zip
或者进入github 地址手动下载
https://github.com/alibaba/arthas/releases
建议使用 v4.0.5 或更高版本(功能更全,支持 pm
命令等)。
✅ 步骤 2:将全量压缩包拷贝到目标服务器
scp arthas-bin.zip user@your-server:/opt/arthas/
✅ 步骤 3:启动 Arthas 并 attach 到目标 Java 进程
cd /opt/arthas/
unzip arthas-bin.zip
java -jar /opt/arthas/arthas-boot.jar
会列出当前服务器上的 Java 进程,输入对应编号即可 attach。
[INFO] Found existing java process, please choose one:
* [1]: 12345 demo.jar[2]: 67890 app.jar
1
[INFO] Attach success.
[arthas@12345]$
三、Docker 容器化集成 Arthas(Dockerfile 方式)
将 Arthas 预装进镜像,确保每个容器都具备诊断能力。
✅ 目录结构建议
your-project/
├── Dockerfile
├── pom.xml
├── src/
│ └── ...
└── arthas/├── arthas-agent.jar├── arthas-bin.zip├── arthas-boot.jar├── arthas-client.jar├── arthas-core.jar├── arthas.properties├── arthas-spy.jar├── as.bat├── as-service.bat├── as.sh├── async-profiler/├── install-local.sh├── lib/├── logback.xml└── math-game.jar
✅ Dockerfile 示例
FROM openjdk:8-jdk-alpine# 创建 arthas 目录
RUN mkdir -p /opt/arthas# 复制离线 arthas 包
COPY ./arthas /opt/arthas/# 复制应用 jar
COPY target/your-app.jar /app.jar# 启动脚本:先启动应用,再 attach arthas(可选自动连接 tunnel)
CMD java -jar /app.jar & \sleep 15 && \java -jar /opt/arthas/arthas-boot.jar --tunnel-server 'ws://tunnel-server:7777/ws' --app-name myapp --telnet-port 3658 --http-port 8563
⚠️
sleep 15
确保应用完全启动后再 attach。
四、Kubernetes(K8s)环境集成 Arthas
方案 1:使用 arthas-k8s
工具(推荐)
helm repo add arthas https://alibaba.github.io/arthas
helm install arthas arthas/arthas-k8s
一键 attach:
arthas-k8s attach myapp-0
方案 2:在 Deployment 中预装 Arthas
apiVersion: apps/v1
kind: Deployment
metadata:name: myapp
spec:replicas: 3template:spec:containers:- name: appimage: myapp:latestcommand: ["/bin/sh"]args:- "-c"- |java -jar /app.jar &sleep 15java -jar /opt/arthas/arthas-boot.jar --tunnel-server 'ws://tunnel-server:7777/ws' --app-name myapp
五、多机/多 Pod 集中管理:Arthas Tunnel(推荐)
🌐 架构图(Mermaid)
✅ 优势
- 统一入口,无需 SSH
- 支持多租户、权限控制
- 可记录诊断会话,便于审计
六、常用命令速查表(Arthas 快速上手)——实战扩展版
命令 | 说明 | 实际使用场景示例 |
---|---|---|
dashboard | 实时查看 JVM 状态:线程、内存、GC | 服务卡顿?第一反应就是 dashboard 看 CPU 和内存 |
thread -n 5 | 查看 CPU 占用最高的 5 个线程 | 发现 http-nio-8080-exec-7 占 90%,可能死循环 |
thread --deadlock | 检查死锁线程 | 接口无响应?可能是线程死锁了 |
thread 76 | 查看 ID 为 76 的线程堆栈 | 结合上条,定位死锁或阻塞点 |
sc *Controller* | 查找类名匹配的类 | 找不到 OrderController ?用它确认是否加载 |
sc -d com.example.OrderController | 查看类的详细信息(类加载器、来源 jar) | 类冲突?看是从哪个 jar 加载的 |
sm com.example.OrderController | 查看该类所有方法 | 确认方法名、参数列表 |
watch com.example.OrderController createOrder '{params, returnObj}' -x 3 | 观察方法入参和返回值 | 某用户下单失败?用此命令捕获其请求参数 |
watch com.example.OrderController createOrder throwExp -e -x 3 | 只在抛异常时触发 | 捕获异常堆栈,无需加日志 |
trace com.example.OrderService payOrder | 追踪方法调用链,定位性能瓶颈 | 接口慢?看是 DB、RPC 还是文件处理拖慢 |
trace *Controller * /api/order/create | (v3.7+)通过 URL 路径匹配方法 | 快速定位处理某个接口的方法 |
jad com.example.OrderService | 反编译类 | 线上代码是否是我提交的?反编译一看便知 |
jad com.example.OrderService > /tmp/OrderService.java | 反编译并保存到文件 | 便于离线分析 |
profiler start profiler stop | 生成火焰图,分析热点 | 全局性能分析,找出最耗时的方法 |
profiler stop --file /tmp/flame.html | 指定火焰图输出路径 | 下载后用浏览器打开 |
vmtool --action getInstances --class java.lang.String --limit 10 | 获取 JVM 中某个类的实例 | 内存泄漏排查,查看大字符串 |
getstatic com.example.Config ENV | 查看类的静态字段值 | 配置是否正确加载? |
ognl '@java.lang.System@getenv("PATH")' | 执行任意 OGNL 表达式 | 调试系统环境变量(慎用) |
七、最佳实践建议
场景 | 推荐方案 |
---|---|
临时排查 | 进入容器或服务器,临时安装 Arthas |
生产环境 | 预装 Arthas + 使用 arthas-tunnel |
K8s 环境 | 使用 arthas-k8s 或预装 + tunnel |
多机管理 | 必用 arthas-tunnel ,实现浏览器统一接入 |
安全要求高 | 离线部署,禁用远程下载 |
性能问题 | 优先 trace + profiler |
业务逻辑问题 | 优先 watch + jad |
八、总结
功能 | 是否支持 |
---|---|
离线安装 | ✅ 支持,推荐生产使用 |
Docker 集成 | ✅ 支持,Dockerfile 预装 |
K8s 集成 | ✅ 支持,arthas-k8s 或 Deployment 注入 |
多机集中管理 | ✅ 支持,arthas-tunnel 是关键 |
无侵入诊断 | ✅ 支持,不重启、不改代码 |
火焰图生成 | ✅ 支持,profiler 命令 |
URL 路径匹配 | ✅ v3.7+ 支持 pm 和 trace |
🎯 Arthas 是每个 Java 工程师都应掌握的“线上救命工具”。
结合 离线安装 + Docker/K8s 集成 + arthas-tunnel,你将拥有:
🔍 随时可诊断、全局可监控、问题秒定位 的强大能力!
📌 立即行动建议:
- 下载
arthas-boot.jar
放入项目根目录 - 修改
Dockerfile
预装 Arthas - 部署
arthas-tunnel-server
,实现集中管理
从此,告别“重启加日志”,拥抱“实时诊断”新时代!
更多教程:https://arthas.aliyun.com/doc/arthas-tutorials.html