Arthas简单入门与初步实践

         Arthas又是国内牛逼JAVA大哥阿里巴巴开源的Java诊断工具,(真的给跪了,这才叫真的技术,整天写CRUD的都是🌶️🐓好吗,比如我),本人经过简单使用后,发现是真的牛逼,而且门槛没那么高,简单操作即可在线上排查问题。

以下内容已Windows平台为例。

1.下载Arthas

#到如下页面下载Arthas
https://arthas.aliyun.com/doc/en/download.html
或者直接使用此地址下载
https://arthas.aliyun.com/download/latest_version?mirror=aliyun

2.安装Arthas

其实,不用安装解压即可,解压后文件夹内容如下

3.启动Arthas

CMD 或 Windows Terminal(推荐)进入arthas目录下,执行如下命令

java -jar arthas-boot.jar

启动时Arthas会自动探测java进程,将所有java进程罗列出来,让你选择一个java进程进行诊断

接下来我们输入   3,回车,就会选择我们自己的java web应用进程,Arthas会attach到目标进程上,并输出日志:

4.查看Dashboard

输入dashboard,按回车,会展示当前进程的信息,显示内容是不断滚动刷新的,按ctrl+c可以中断执行。

5.输入thread查看线程信息

6.查看类加载器信息

#可使用如下命令查看类加载器信息
classloader
classloader -l
classloader -t

7.查看类信息

#模糊搜索已加载的类
sc *DataSourceUtil*

#打印类的详细信息
sc -d org.springframework.jdbc.datasource.DataSourceUtils

8.通过jad反编译class

如果我们想查看class文件对应的源码什么,可以使用jad命令进行反编译

#反编译输出到文件
jad org.springframework.jdbc.datasource.DataSourceUtils > D:/DataSourceUtils.java

可以看到反编译输出的java文件中,还输出了一些ClassLoader,Location等arthas输出的信息,因此如果直接用这个java文件进行内存编译是会报错的,如果我们想直接生成纯净的java源码文件,可以使用:

#反编译输出到文件,仅输出源码
jad --source-only org.springframework.jdbc.datasource.DataSourceUtils > D:/DataSourceUtils.java

可以看到这个时候没有了源码之外的信息

9.使用mc命令对修改后的java源码进行内存编译

比如,我们在已经将要进行热更新的Class通过上面的jad命令已经将源码反编译出来,这个时候我们可以在源码上修复我们的bug,修复之后,我们用新的编译好的class文件替换JVM中已经加载的class文件,就可以使得应用执行新的代码,起到热修复的效果。在替换class之前,我们首先要做的当然是先把java文件编译为class文件。

#对某个类进行内存编译,并输出class文件到指定目录
mc D:/DataSourceUtils.java -d D:/

10.使用redefine命令实现热更新代码

作为测试我们在反编译的源码中加入了如下内容,接下来我们将代码进行热更新,看看是否实现了我们的效果。

使用如下命令将新编译的class文件热更新到jvm中

redefine D:/org/springframework/jdbc/datasource/DataSourceUtils.class

当应用再次执行到getConnection方法的时候,输出如下:

至此,其实我们就修改了一个Spring boot项目中,从数据库连接池中获取数据库连接出现异常时的代码。

11.退出Arthas

如果只是退出当前的连接,可以用quit或者exit命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。

使用quit和exit退出当前连接后,热修复的代码仍旧生效。因为Arthas仍然attach到目标进程。

如果想完全退出arthas,可以执行stop命令。

可以发现,Arthas完全退出后,redefine过的类仍然生效!!!!!不会在Arthas shutdown时被reset,reset重置的是monitor等命令增强过的类!!!

写在最后,使用Windows Terminal (PowerShell,cmd)操作Arthas体验不是特别好(直接用CMD也是如此),比如删除键不能使用,无法修改输入错误的命令;↑键也不能用来快捷执行上一条命令。其实,Arthas是提供了网页版客户端的,在浏览器中输入网址:

http://127.0.0.1:3658, 网页版没有上述两个问题,不过全屏在我这里有bug,各位看官各取所需吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值