记录一次 Arthas 使用

疫情期间,在家办公,每天都是 007,感觉自己已经升级为熊猫特工了,心累,身体疲惫!!!

今天终于有时间休息一下,然后记录一下在家办公期间 Arthas 的简单使用。

下载安装

  • 方式一:

    推荐使用 IDEA 插件下载 Cloud Toolkit 来使用 Arthas

Cloud Toolkit 是阿里云发布的免费本地 IDE 插件,帮助开发者更高效地开发测试、诊断并部署应用。通过插件,可以将本地应用一键部署到任意服务器,甚至端(ECS、EDAS、ACK、ACR 和 小程序云等);并且还内置了 Arthas 诊断、Dubbo工具、Terminal 终端、文件上传、函数计算 和 MySQL 执行器等工具。不仅仅有 IntelliJ IDEA 主流版本,还有 Eclipse、Pycharm、Maven 等其他版本。

  • 方式二:

    直接下载

启动:java -jar arthas-boot.jar

这里需要重点说明一下:必须使用和目标进程相同的用户,否则启动不成功。

问题背景

本人前天刚上线一个任务。由于某产品手误,误操作了线上数据,要求帮忙把数据删除了。

这尼玛的真坑啊,明显是坑老子。

还好有先见之明,没次做任务的时候多多少少都会写几个后门工具( 不是为了删库跑路,而是这些后门在特定情况下真能应急使用,求人不如求己
)。但是这次后门工具还有改造一下才行,大半夜的又找不到人来帮你上线,自己又没有权限。这时候想起了 Arthas 这个工具可以热加载。

重点来了

jad --source-only com.xxx.xxx.service.aggregate.AggregateNoRoomService > /tmp/AggregateNoRoomService.java
复制代码
复制代码

这里有保密协议限制,包路径已经打码,小伙伴们直接看过程就可以了。

  • vim 修改反编译出来的代码
public AggregateNoRoom getAggregateNoRoom(String agentHotelId) {
	  List<AggregateNoRoom> aggregateNoRooms = aggregateNoRoomDao.selectList(agentId);
 		if (CollectionUtils.isEmpty(aggregateNoRooms)) {
    	return null;
  	}
  	//新增加的逻辑
  	for (AggregateNoRoom room : aggregateNoRooms) {
      aggregateNoRoomDao.delete(room.getId())
    }
  	return aggregateNoRooms.get(0);
}
复制代码
复制代码
  • 将这个类重新编译成 class 文件

这里就不过说明了,简单的程序直接javac x x x x.java就可以了,但是我这个类里面还依赖了其他的类型,所以我是用maven直接编译的整个Java项目,然后但是把这个新的class文件copy出来然后上传到服务器的。

正常来说是应该使用 Arthas
mc
命令来重新编译这个修改后文件。但是我在服务器上始终没有编译成功,错误原因以后在研究。

  • sc 查找加载 **AggregateNoRoomService **的 ClassLoader
sc -d * AggregateNoRoomService | grep classLoaderHash

返回结果:classLoaderHash 1b36fa2

  • redefine 热更新代码
redefine -c 1b36fa2 /tmp/AggregateNoRoomService.class

返回结果:redefine success, size :1

这是时候可以在使用 jad 命令,在反编译一下这个类,看看是不是真正更新成功了。

原文 

https://juejin.im/post/5f1130d06fb9a07e8c68b19f

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 记录一次 Arthas 使用

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址