大家好,我是爱撸代码的开源大叔。
今天给大家分享一款线上系统诊断利器:Arthas
背景
相信很多小伙伴都遇到过这种情况吧,当线上出问题并且没有思路的时候会想着先打点日志,再进行打包、发布、重启的完整发布流程,这种流程太麻烦和耗时了;当出问题的时候,有时会怀疑线上代码是不是自己提交的最新代码,则需要登录服务器把线上的代码down下来反编译才能确定,有的时候服务器还有访问限制。所以就希望有款工具能够实现 在线debug调试而不用重新发布服务,可以查看线上代码、监控代码运行情况等等。这个时候Arthas就诞生了
介绍
Arthas提供了在线Debug、查看线上代码情况、JVM实时运行状态等功能。
快速入门
安装 & 运行
下载
代码语言:javascript复制wget https://arthas.aliyun.com/arthas-boot.jar
安装/运行
代码语言:javascript复制java -jar arthas-boot.jar
会出现机器上所跑的Java进程信息,供选择需要监控的进程,如下图
选择进程服务 这里选择第二个,则直接输入 2 回车就可以了,如下图
启动是不是很简单,那下面就跟着开源大叔去尝试都有哪些强大的功能吧,由于功能很多,这里就简单列出几个进行体验。
1.反编译类查看代码信息
2.查看JVM 线程堆栈信息
高级使用
除了上面介绍的两个简单命令以外,还有其他一些强大的功能
1.查看Arthas快捷键信息
代码语言:javascript复制keymap
2.加入debug日志信息
这里就拿Test举例,在Test中增加打印信息,然后把Test重新编译成class文件,通过Arthas的命令进行重新载入,就可以看到加入的日志调试信息了。
代码语言:javascript复制## class的路径为绝对路径
redefine /self_data/spring-boot-simple/actuator-simple/target/classes/com/hs/springboot/actuator/conf/Test.class
##下面是响应信息,表示已经重新加载了
redefine success, size: 1, classes:
com.hs.springboot.actuator.conf.Test
3.通过jvm命令查看当前jvm的状态信息
4.通过heapdump 生成应用当前的dump信息,和使用jmap命令效果类似
5.还有类加载器相关的命令 例如上面介绍的redefine 加载外部class文件到JVM中
除了上面介绍的 jvm 或者类/类加载器相关的,Arthas还包括了一些监控命令监控方法执行的montior命令、监控方法执行数据的watch命令以及方法路径上每个节点耗时的trace命令。
Arthas除了到机器上执行命令以外,还有一个强大的功能就是通过 浏览器进行操作,跟着开源大叔一起来看看吧。Arthas默认监听的是本地ip,如果想远程连接远端IP可以考虑使用tunnel server进行操作,这边就拿本地来体验一下Arthas的 Web Console效果吧。
浏览器访问http://localhost:3658 会出下下面的画面
在这上面操作和连上服务器操作效果是完全一样的,操作起来很流畅 如下图:
通过上面的介绍大家是不是对Arthas有了初步的了解了呢,那我们今天Arthas的介绍就到这里,我们来总结一下吧。
总结
1.Arthas是一款采用命令行交互模式的Java诊断工具。
2.提供了丰富的命令行工具包括 简单基础命令、JVM命令、class/classloader相关命令、监控命令、profiler/火焰图、鉴权等功能,以及丰富的快捷键,当然还可以自定义快捷键来满足自己的需要。
3.提供了可以通过浏览器操作的Web Console 控制台 以及tunnel server管理/连接多个Agent。
4.Arthas还提供了类似Restful风格的交互api,当感觉上面的命令或者控制台用起来不方便的时候,也可以基于api进行定制化开发。