当前位置: 首页 > news >正文

Arthas 全面使用指南:离线安装 + Docker/K8s 集成 + 集中管理

Arthas(阿尔萨斯)——Java 应用的线上诊断“瑞士军刀”


一、什么是 Arthas?

Arthas 是阿里巴巴开源的一款 Java 线上诊断工具,能够在不重启、不修改代码的情况下,实时监控和诊断生产环境中的 Java 应用。

🔍 它能帮你解决这些问题:

  • 这个类是从哪个 jar 包加载的?为什么报 ClassNotFoundException
  • 我改的代码怎么没生效?是不是分支错了?
  • 线上某个用户请求出错,但无法 debug,日志也不够?
  • 接口响应慢,到底哪里卡住了?
  • 如何查看 JVM 实时内存、线程、GC 状态?
  • 如何生成火焰图定位性能热点?
  • 怎样从 JVM 内部直接调用方法或获取对象实例?

✅ Arthas 支持 JDK 8+(推荐),支持 Linux/Mac/Windows,采用命令行交互,Tab 补全强大,诊断效率极高。


二、离线安装 Arthas(推荐生产环境使用)

由于生产环境通常禁止外网访问,推荐使用离线方式安装 Arthas

✅ 步骤 1:下载 arthas-boot.jar

在有网络的机器上下载最新版本:

wget https://arthas.aliyun.com/arthas-boot.jar

官方地址:https://arthas.aliyun.com/doc/download.html

建议使用 v4.0.5 或更高版本(功能更全,支持 pm 命令等)。

✅ 步骤 2:将 jar 包拷贝到目标服务器

scp arthas-boot.jar user@your-server:/opt/arthas/

✅ 步骤 3:启动 Arthas 并 attach 到目标 Java 进程

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/
├── arthas-boot.jar        # 与 Dockerfile 平级
├── Dockerfile
├── pom.xml
└── src/

✅ Dockerfile 示例

FROM openjdk:8-jdk-alpine# 创建 arthas 目录
RUN mkdir -p /opt/arthas# 复制离线 arthas 包
COPY arthas-boot.jar /opt/arthas/arthas-boot.jar# 复制应用 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)

管理端
生产环境
浏览器
Arthas Tunnel Server
机器1: Arthas Client
机器2: Arthas Client
Pod1: Arthas Client
Pod2: Arthas Client
C,D,E,F

✅ 优势

  • 统一入口,无需 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+ 支持 pmtrace

🎯 Arthas 是每个 Java 工程师都应掌握的“线上救命工具”
结合 离线安装 + Docker/K8s 集成 + arthas-tunnel,你将拥有:

🔍 随时可诊断、全局可监控、问题秒定位 的强大能力!


📌 立即行动建议

  1. 下载 arthas-boot.jar 放入项目根目录
  2. 修改 Dockerfile 预装 Arthas
  3. 部署 arthas-tunnel-server,实现集中管理

从此,告别“重启加日志”,拥抱“实时诊断”新时代!

更多教程:https://arthas.aliyun.com/doc/arthas-tutorials.html

http://www.dtcms.com/a/339368.html

相关文章:

  • WRC大会精彩回顾 | NanoLoong机器人足球首秀青龙机械臂咖啡服务双线出击
  • 释永信,领先10年的AI心法!
  • sqllabs(2)
  • 机器学习之数据模型训练(三)
  • 嵌入式第三十二天(信号,共享内存)
  • 装修水电全改的避坑指南有哪些?
  • [激光原理与应用-304]:光学设计 - 光学设计报告的主要内容、格式与示例:系统记录了从需求分析到最终设计的完整过程
  • windows环境,安装kafka
  • PMP项目管理:PMBOK 第六版 与 第七版 有啥区别 / 如何备考
  • Spring Boot应用实现图片资源服务
  • WSL2环境下的Claude Code与lanyuncodingui安装与配置
  • 差速转向机器人研发:创新驱动的未来移动技术探索
  • 子网掩码(拓)
  • 汇编语言学习2---GNU Debugger (GDB)
  • bypass webshell--Trait
  • canopen 初体验
  • 【qml-4】qml与c++交互(类型多例)
  • 配置nginx以支持http3
  • rabbitmq发送的延迟消息时间过长就立即消费了
  • Maven的三种项目打包方式——pom,jar,war的区别
  • 微算法科技(NASDAQ: MLGO)研究利用PBFT中的动态视图变换机制,实现区块链系统高效运转
  • 股指本周想法
  • 区块链 + 域名Web3时代域名投资的新风口(下)
  • 使用 Docker 安装长安链管理平台 + 部署长安链
  • DL00291-联邦学习以去中心化锂离子电池健康预测模型完整实现
  • Transformer实战(13)——微调Transformer语言模型用于文本分类
  • 操作系统:多线程、进程管理、内存分配、任务调度等
  • Gemini CLI 详细操作手册
  • ECC升级S4,AVL自定义GUI 状态无法显示全选和取消全选按钮
  • Matplotlib数据可视化实战:Matplotlib基础与实践-快速上手数据可视化