Arthas 线上常用命令速查手册:Java 诊断神器,5 分钟定位线上问题!

一、Arthas 是什么?为什么用它?

Arthas 是阿里巴巴开源的一款 Java 线上诊断工具,无需重启 JVM、无需修改代码,即可实时监控、诊断 Java 应用的运行状态。

✅ 适用场景

场景 传统方式 Arthas 方式
线上 CPU 飙高 top + jstack 手动抓栈 thread -n 3 一键定位
接口响应慢 加日志 → 重新发布 trace 追踪耗时
代码未生效 怀疑人生 jad 反编译确认
异常信息不全 日志缺失 watch 实时观测
热更新 重启服务 redefine 热加载

二、快速安装与启动

1. 一键启动(推荐)

bash 复制代码
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

2. 选择目标进程

bash 复制代码
[INFO] Found existing java process, please choose one:
* [1]: 12345 demo.jar
  [2]: 67890 app.jar

输入编号(如 1)即可 attach。


三、线上高频命令速查表

命令 功能 示例
dashboard 实时系统面板(线程、内存、GC) dashboard -i 2000 -n 5
thread 线程分析 thread -n 3(最忙线程) thread -b(死锁)
trace 方法耗时追踪 trace com.example.UserService getUserById
watch 观测方法入参/返回值/异常 watch com.example.UserService getUserById "{params, returnObj, throwExp}" -x 3
jad 反编译类或方法 jad com.example.UserService
sc 查找已加载的类 sc -d com.example.UserService
sm 查看类方法签名 sm -d com.example.UserService
monitor 方法调用统计 monitor -c 60 com.example.UserService getUserById
tt 方法调用时光隧道(记录与回放) tt -t com.example.UserService getUserById
heapdump 导出堆快照 heapdump /tmp/dump.hprof
profiler 生成 CPU 火焰图 profiler startprofiler stop --format html
redefine 热更新 .class 文件 redefine /tmp/UserService.class

四、实战案例:5 分钟定位线上问题

案例 1:CPU 飙高

bash 复制代码
# 1. 查看最忙线程
thread -n 1

# 2. 查看堆栈
thread 123

# 3. 反编译问题方法
jad com.example.MyService calculate

案例 2:接口响应慢

bash 复制代码
# 1. 追踪方法耗时
trace com.example.controller.UserController getProfile

# 2. 发现数据库查询慢
trace com.example.dao.UserDAO findById

# 3. 查看 SQL 参数
watch com.example.dao.UserDAO findById "{params[0]}" -x 1

案例 3:代码未生效(热更新)

bash 复制代码
# 1. 反编译源码
jad com.example.UserService --source-only > /tmp/UserService.java

# 2. 修改代码后编译
mc /tmp/UserService.java -d /tmp

# 3. 热加载
redefine /tmp/com/example/UserService.class

五、注意事项与最佳实践

项目 建议
权限控制 生产环境限制使用权限,避免误操作
性能影响 watchtrace 会增强字节码,排查后及时 stopreset
安全风险 禁止将 Arthas 暴露在公网,建议通过隧道或跳板机访问
命令冲突 redefinewatch/trace 冲突,使用前需 reset

六、进阶:Docker & K8s 集成建议

Dockerfile 示例(预装 Arthas)

dockerfile 复制代码
FROM openjdk:8-jdk-alpine
COPY arthas /opt/arthas
COPY app.jar /app.jar
CMD java -jar /app.jar & \
    sleep 15 && \
    java -jar /opt/arthas/arthas-boot.jar --tunnel-server 'ws://tunnel-server:7777/ws' --app-name myapp

K8s 一键 attach(推荐)

bash 复制代码
helm install arthas arthas/arthas-k8s
arthas-k8s attach myapp-0

七、总结:一张图记住 Arthas

text 复制代码
+--------------------------------------------------+
|                    Arthas                        |
|                                                  |
|  dashboard → 系统面板                            |
|  thread   → 线程/死锁                            |
|  trace    → 方法耗时                             |
|  watch    → 入参/返回值/异常                      |
|  jad      → 反编译                               |
|  tt       → 时光隧道(记录+回放)                 |
|  redefine → 热更新                               |
|  profiler → 火焰图                               |
+--------------------------------------------------+

八、参考资料与延伸阅读


© 2025 技术博客 | 转载请注明原作者与链接

相关推荐
6***830510 分钟前
SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪
spring boot·后端·skywalking
有追求的开发者34 分钟前
2025 年终总结:一个 Python DevOps 的成长之路
后端
有追求的开发者38 分钟前
别再等缓存自己"热"起来了!Python后端必会的预热技巧 🚀
后端
乌暮39 分钟前
JavaEE初阶---《JUC 并发编程完全指南:组件用法、原理剖析与面试应答》
java·开发语言·后端·学习·面试·java-ee
内存不泄露40 分钟前
基于Django和Vue3的文件分享平台设计与实现
后端·python·django
有追求的开发者40 分钟前
别再搞混了!127.0.0.1 和 localhost 背后的秘密
后端
野生技术架构师42 分钟前
Spring Boot 4.0 预览版深度解析
java·spring boot·后端
PXM的算法星球1 小时前
用 semaphore 限制 Go 项目单机并发数的一次流量控制优化实践
开发语言·后端·golang
武子康1 小时前
大数据-210 如何在Scikit-Learn中实现逻辑回归及正则化详解(L1与L2)
大数据·后端·机器学习
Coder_Boy_1 小时前
Spring Boot 事务回滚异常 UnexpectedRollbackException 详解(常见问题集合)
java·spring boot·后端