Skip to content

arthas

arthas是一款强大的在线诊断工具,可以通过官网查看详细介绍。

arthas 使用。持续补充...

使用

通过这里我们找到一种自己习惯的安装方式,这里我通过如下方式安装:

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

如果需要中文支持,启动命令增加如下参数:

java
-Dfile.encoding=UTF-8

而后启动起来,界面如下:

arthas_1.png

根据需要选择要诊断的应用服务,例如选择3,出现如下界面:

arthas_2.png

接下来我们就需要添加诊断命令了。从官网可以看到支持的命令非常多,接下来就来演示下最常见的两个需求:

  • watch

诊断某个方法的入参出参

  • trace

诊断某个方法执行节点的耗时情况

  • sc

诊断 jar 包冲突

bash
sc -d 类全路径名

当然这里也可以在 idea 使用 maven helper 插件查找依赖

  • thread

排查线程死锁,以及线程状态:

bash
thread -b   #排查死锁情况
thread -n 3 #查询当前最忙的 N 个线程

从官网的介绍可以发现这些诊断命令不仅长而且还有格式要求且难记,在这里就分享一个小工具,可以帮助我们快速生成诊断命令。

插件安装

idea 2022 版,搜索 arthas idea。安装后右键可以看到如下图:

arthas_3.png

如果我们要选择诊断 watch 命令,直接右键选择,回到

arthas_2.png

这里来,粘贴命令,回车。而后通过 http 工具调用诊断的接口或是方法便可以看到如下效果:

arthas_4.png

接下来再来看下 trace 诊断。

arthas_5.png

trace 诊断会包含调用链路的时间耗时,这很有利于我们做性能优化。通过上图我们可以看到 getInfoById 耗时在 79% 以上,优化它对于接口性能提升会很明显。

常见问题

  • Can not find java process. Try to run jps command lists the instrumented Java HotSpot VMs on the target system.

    • 第一种情况检查是否已经启动 java 服务
    • 第二种情况已启动 java 服务,但仍然报错的。那说明当前安装的 jvm 不支持 jps,重新执行如下命令即可:
    bash
       rpm -qa | grep jdk # 检索安装的 jdk。一般来说是 1.8
       yum -y remove java-1.8.0-openjdk* # 卸载所有的 jdk 组件
       yum install -y java-1.8.0-openjdk-devel.x86_64 # 重新安装
  • java.lang.InternalError: instrument library is missing in target VM

  • Caused by: com.sun.tools.attach.AgentLoadException: Failed to load agent library

    以上两种情况都是重启一下对应的 java 服务再重试一下即可。

常见案例

小结

通过这样一种在线诊断方式,我们可以很好的解决一些本地又难以复现只有在线上才出现的问题。现在拥有这么一把神器,写出高性能的代码还会难吗?