Arthas 是Alibaba开源的Java诊断工具,基于greys实现

具体功能

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

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

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

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

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

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

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

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

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

基本使用

1
2
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

快速入门 — Arthas 3.5.5 文档

常用指令

  • watch 观察函数调用情况,可以获取返回值,抛出异常,入参

    使用场景: 线上bug,本地难以复现时,可以找到关键函数,了解其入参和出参是否符合预期

  • monitor 方法执行监控

    使用场景: 可以确认代码是否被执行到

  • logger 动态修改日志级别

官方文档里还提供了很多实用的命令,详细见下方链接

命令列表 — Arthas 3.5.5 文档

idea插件

arthas提供了idea插件,可以很方便的获取程序的表达式,而不用去记忆

Jetbrains 插件获取地址: https://plugins.jetbrains.com/plugin/13581-arthas-idea

使用文档:https://www.yuque.com/arthas-idea-plugin

源码地址: https://github.com/WangJi92/arthas-idea-plugin

安装后,在指定方法鼠标右键点击选择arthas command既可

在docker中使用

直接在服务器使用的教程,官方的入门手册很完善了,这里主要说下在docker下的使用

很多时候,应用在docker里出现arthas无法工作的问题,是因为应用没有安装 JDK ,而是安装了 JRE 。如果只安装了 JRE,则会缺少很多JAVA的命令行工具和类库,Arthas也没办法正常工作

但是用这种方式无法使用mc命令

第一种方式: 使用包管理工具安装jdk

1
2
3
  apt-get update && \
    apt-get install -y openjdk-8-jdk && \
    apt-get clean

第二种方式: 直接下载jdk到容器中,然后用新下载的jdk启动arthas

1
2
3
4
  wget https://builds.openlogic.com/downloadJDK/openlogic-openjdk/8u262-b10/openlogic-openjdk-8u262-b10-linux-x64.tar.gz
  tar -xzvf openlogic-openjdk-8u262-b10-linux-x64.tar.gz
  curl -O https://arthas.aliyun.com/arthas-boot.jar
  ./openlogic-openjdk-8u262-b10-linux-64/bin/java -jar arthas-boot.jar