在线分析诊断工具Arthas

简介

Arthas 是Alibaba开源的Java诊断工具。

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

这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?

我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?

遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?

线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!

是否有一个全局视角来查看系统的运行状况?

有什么办法可以监控到JVM的实时运行状态?

================

以上是Arthas官方介绍。

Arthas提供了热更新线上代码功能,在线上部署Arthas是比较危险,会破坏线上代码的版本管理。所以,不建议在线上环境部署Arthas。但是可以在测试环境部署,用于测试环境的debug。其实各种IDE工具也提供了远程断点功能,使用IDE工具远程断点功能,需要满足以下条件:

以debug模式启动java虚拟机

保证本地代码和测试环境运行代码版本一致

本地开发环境与测试环境网络是通的

使用IDE进行断点并不能完全模拟测试环境,毕竟是部署的是两套系统,依赖包,环境可能会有不同。

安装

Arthas有多种安装方式,下面方式安装比较简单。

最新版本,点击下载:arthas

解压后,在文件夹里有arthas-boot.jar

直接用java -jar的方式启动:

java -jar arthas-boot.jar

Arthas启动会列出本地除了自己本身之外启动的jvm进程

以下就以MyPaasGatewayApplication为例,介绍Artthas部分功能使用。

使用

选择jvm进程列表对应的序号,连接到需要debug的jvm,这里选择编号为1的jvm

回车后进入所选jvm对应的命令行界面。

输入help看一下帮助。

可以看到arthas支持查询classloader,thread,jvm,dashboard,sysprop,sysenv等信息。

也支持使用jad反编译类,使用mc编译类,使用redefine重新加载类。

使用dashboard查看当前jvm概要信息。

可以看到当前jvm线程状况,memory使用状况的信息。

在调试代码的过程中,查看变量值的和更新字节码这两个功能用得多一些,下面以MyPaasGatewayApplication为例子演示一下如何使用arthas查看变量值和更新字节码。

查看变量值

在MyPaasGatewayApplication的实现中,有一个过滤器实现BuryPointFilter用于检查请求是否需要发送埋点信息,如果埋点信息开关开启,则发送埋点信息。代码如下:

假设测试环境没有开启debug lever log,或者懒得搜索日志,这里就可以用arthas的watch来观察shouldFilter方法的返回值。

watch后面接的参数为:

1.被观察对象的类名

2.被观察的方法

3.方法的返回值

可以看到输出

result=@Boolean[true]

表示shouldFilter返回的值是true.

更新字节码

手动禁掉BuryPointFilter,修改shouldFilter函数,总是返回false.

获取反编译代码

使用jad命令反编译类。

得到以下代码:

修改反编译出来的代码,改变shouldFilter的值,并打印log,log设置为warn级别,方便观察字节码修改结果。

查找加载BuryPointFilter的ClassLoader

生成的字节码要包含原来类加载器的信息,所以要找到BuryPointFilter是由jvm中哪个classLoader加载的。使用sc(search class)命令搜索classLoader信息.

-d 参数表示搜索详细信息(detail)

得到classLoader信息后,就可以生成带classLoader信息的字节码了。

生成代码修改后的字节码

使用mc(memory compiler)命令生成字节码


-c 参数指定classLoader

-d 参数指定生成后的字节码位置

redefine热更新代码

使用redefine重新加载新编译好的.class


这里没有重启jvm,发一个请求检验更新字节码是否生效


可以看到打印了新增的日志。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容