写点什么

Arthas 全攻略:让调试变得简单

作者:刘大猫
  • 2025-05-20
    黑龙江
  • 本文字数:1593 字

    阅读完需:约 5 分钟


@[toc]

一、简介


Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。


注意我安装的版本是:Arthas V3.7.2



背景


通常,本地开发环境无法访问生产环境。如果在生产环境中遇到问题,则无法使用 IDE 远程调试。更糟糕的是,在生产环境中调试是不可接受的,因为它会暂停所有线程,导致服务暂停。


开发人员可以尝试在测试环境或者预发环境中复现生产环境中的问题。但是,某些问题无法在不同的环境中轻松复现,甚至在重新启动后就消失了。


如果您正在考虑在代码中添加一些日志以帮助解决问题,您将必须经历以下阶段:测试、预发,然后生产。这种方法效率低下,更糟糕的是,该问题可能无法解决,因为一旦 JVM 重新启动,它可能无法复现,如上文所述。


Arthas 旨在解决这些问题。开发人员可以在线解决生产问题。无需 JVM 重启,无需代码更改。 Arthas 作为观察者永远不会暂停正在运行的线程。


Arthas(阿尔萨斯)能为你做什么?


Arthas 是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。


当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决:


  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?

  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?

  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?

  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!

  5. 是否有一个全局视角来查看系统的运行状况?

  6. 有什么办法可以监控到 JVM 的实时运行状态?

  7. 怎么快速定位应用的热点,生成火焰图?

  8. 怎样直接从 JVM 内查找某个类的实例?


Arthas 支持 JDK 6+(4.x 版本不再支持 JDK 6 和 JDK 7),支持 Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。


核心作用是什么?


Alibaba开源的Java诊断工具。


从 arthas-boot 开始,它的核心作用就是启动引导用户选择需要增强的 Java 进程 PID,最终将 PID 传入 arthas-core 中;arthas-core 根据用户选择的 PID,利用 Java Agent 机制使用 arthas-agent 对目标进程进行增强;arthas-agent 被唤醒后,就会启动命令行服务器监听命令,并匹配对应的命令处理器(XxxCommand)对用户命令进行处理,并返回。


二、命令列表

用户头像

刘大猫

关注

还未添加个人签名 2022-08-23 加入

还未添加个人简介

评论

发布
暂无评论
Arthas 全攻略:让调试变得简单_人工智能_刘大猫_InfoQ写作社区