Java5分钟定位线上问题
一、Arthas 是什么?为什么用它?
Arthas 是阿里巴巴开源的一款 Java 线上诊断工具,无需重启 JVM、无需修改代码,即可实时监控、诊断 Java 应用的运行状态。
适用场景
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
二、快速安装与启动
1. 一键启动(推荐)
curl -O https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar
2. 选择目标进程
[INFO] Found existing java process, please choose one:
* [1]: 12345 demo.jar
[2]: 67890 app.jar
输入编号(如 1)即可 attach。
三、线上高频命令速查表
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
如果你近期准备面试跳槽,建议在ddkk.com在线刷题,涵盖 一万+ 道 Java 面试题,几乎覆盖了所有主流技术面试题,还有市面上最全的技术五百套,精品系列教程,免费提供。
四、实战案例:5 分钟定位线上问题
案例 1:CPU 飙高
# 1. 查看最忙线程
thread -n 1
# 2. 查看堆栈
thread 123
# 3. 反编译问题方法
jad com.example.MyService calculate
案例 2:接口响应慢
# 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:代码未生效(热更新)
# 1. 反编译源码
jad com.example.UserService --source-only > /tmp/UserService.java
# 2. 修改代码后编译
mc /tmp/UserService.java -d /tmp
# 3. 热加载
redefine /tmp/com/example/UserService.class
五、注意事项与最佳实践
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
六、进阶:Docker & K8s 集成建议
Dockerfile 示例(预装 Arthas)
ROM 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(推荐)
helm install arthas arthas/arthas-k8s
arthas-k8s attach myapp-0
七、总结:一张图记住 Arthas
+--------------------------------------------------+
| Arthas |
| |
| dashboard → 系统面板 |
| thread → 线程/死锁 |
| trace → 方法耗时 |
| watch → 入参/返回值/异常 |
| jad → 反编译 |
| tt → 时光隧道(记录+回放) |
| redefine → 热更新 |
| profiler → 火焰图 |
+--------------------------------------------------+
八、参考资料与延伸阅读
Arthas 官方文档(中文)
Arthas GitHub 仓库
版权声明:
作者:lhylwl
链接:https://ye-w.cn/2026/01/08/71.html
来源:小凡笔记-我的技术记录
文章版权归作者所有,未经允许请勿转载。
THE END
二维码
打赏