wildfly环境中使用arthas进行Java问题的定位和诊断

570 阅读2分钟

小知识,大挑战!本文正在参与“ 程序员必备小知识 ”创作活动

在掘金学习了很多东西,第一次在上面发稿,记录一下我在wildfly上使用arthas进行调试的一个简略流程,希望与大家共同进步!

1.arthas官方介绍

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

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

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到JVM的实时运行状态?
  7. 怎么快速定位应用的热点,生成火焰图?
  8. 怎样直接从JVM内查找某个类的实例?

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

2.快速安装

下载arthas-boot.jar,然后用java -jar的方式启动:

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

如果下载速度比较慢,可以使用aliyun的镜像

java -jar arthas-boot.jar --repo-mirror aliyun --use-http

3.配置arthas.properties

对于 wildfly,表现是在watch/trace一些classloader加载的类时,会匹配不到类,并且在arthas.log里有:

the classloader can not load SpyAPI, ignore it.

要解压后,配置 arthas.properties,如果是自动下载的arthas,则目录在

~/.arthas/lib/3.x.x/arthas/arthas.properties

#添加
arthas.enhanceLoaders=java.lang.ClassLoader,org.jboss.modules.ConcurrentClassLoader

修改完后,需要执行stop命令配置才生效

4.退出命令

第一种

#退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
quit

第二种

#关闭 Arthas 服务端,所有 Arthas 客户端全部退出
shutdown
#stop——和shutdown命令一致

5.arthas常用命令

个人在平常在实际项目中使用较多的是trace,用于产看方法耗时,定位性能问题,然后就是watch,用于在运行环境中查看方法的入参与返回值等,包括异常信息等。