小知识,大挑战!本文正在参与“ 程序员必备小知识 ”创作活动
在掘金学习了很多东西,第一次在上面发稿,记录一下我在wildfly上使用arthas进行调试的一个简略流程,希望与大家共同进步!
1.arthas官方介绍
Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。
当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
- 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
- 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
- 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
- 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
- 是否有一个全局视角来查看系统的运行状况?
- 有什么办法可以监控到JVM的实时运行状态?
- 怎么快速定位应用的热点,生成火焰图?
- 怎样直接从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,用于在运行环境中查看方法的入参与返回值等,包括异常信息等。