java在线诊断神器-Arthas-试用札记

笔者闲逛开源中国,偶遇“开源中国 2018 年度榜单之国产新秀榜”之top1-Arthas,遂观之。阅后兴奋不已,此乃上古神器也。神器流落凡间,岂可枉顾之?盘它。。。

一 Arthas 何许神器?

神器铸造者如是说:
当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
是否有一个全局视角来查看系统的运行状况?
有什么办法可以监控到JVM的实时运行状态?

呐尼?如是而言,生产环境的问题岂非暴露无遗?再也不用为了定位生产环境问题而抓耳挠腮?不用再为了加个日志而打包上线重启?so crazy!

二 Arthas安装篇

wget https://alibaba.github.io/arthas/arthas-boot.jar下载
执行:java -jar arthas-boot.jar

简单到想哭 有木有。

(ps:如果使用高大上的mac,可以使用homebrew安装wget后安装。)

当然想要全量下载安装也是可以的 arthas下载

三 小试牛刀
3.1启动arthas:
java -jar arthas-boot.jar

5134475-76755d47b23df61b.png
image.png

3.2选择需要查看的进程:
2

5134475-67d48f8093281f4a.png
image.png

3.3当前进程的信息,按ctrl+c可以中断执行
dashboard

5134475-d88456d0ddec740d.png
image.png

可以看到进程里运行中的线程,内存、jvm及GC信息。

四 牛逼闪闪的功能
4.1 jad反编译指定已加载类的源码

命令:thread 1查看线程信息,找到类路径demo.MathGame

5134475-009a29321c31414c.png
image.png

反编译类:jad demo.MathGame

5134475-1df22a88612f44b3.png
image.png

反编译指定函数: jad demo.MathGame main

再也不用为了反编译代码,从服务器拉下jar包找破解软件进行反编译了有没有。。。

4.2 方法执行数据观测
watch可以观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写 OGNL 表达式进行对应变量的查看。

观察方法出参和返回值:
watch demo.MathGame primeFactors "{params,returnObj}" -x 2

5134475-6375eb623d1225aa.png
image.png

4.3 redefine
加载外部的.class文件,redefine jvm已加载的类
该功能可以使得在不替换jar和重启的情况下,通过替换需要的class文件来实现调试,比如追加日志。
关于该功能的使用,Arthas实践--使用redefine排查应用奇怪的日志来源的讲述颇为直观,可参考之。

4.5除上述外还有trace命令可以查看方法内部调用路径,并输出方法路径上的每个节点上耗时;sc命令查看JVM已加载的类信息等等,诸君可细细把玩,盘它或有受益。

猜你喜欢

转载自blog.csdn.net/weixin_34114823/article/details/86965921