记录一次Arthas使用

前言

在疫情期间,首先要为武汉加油,中国加油!!!java

在家办公,天天都是007,感受本身已经升级为熊猫特工了,心累,身体疲惫!!!git

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

下载安装

下载安装就很少说了。直接贴官网教程。vim

下载:curl -O alibaba.github.io/arthas/arth…bash

启动:java -jar arthas-boot.jar服务器

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

问题背景

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

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

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

重点来了

  • jad反编译代码

jad --source-only com.xxx.xxx.service.aggregate.AggregateNoRoomService > /tmp/AggregateNoRoomService.java复制代码
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);
}复制代码

后续还会更新Arthas的其余使用,喜欢的小伙伴能够关注个人公众号。

Arthas其实仍是很强大的,能够帮咱们排查线上问题,环境容许的状况建议可使用,会带来不少便利,这里就过多说明了。

总结

可是我在这里仍是强调一下,最好仍是慎用,毕竟走正规流程还不不用背锅的。(这么作很容背锅,并且产品小哥或者产品小姐姐下次会直接找你帮我修复点数据呗,直接绕过了你领导或上级。

说明我这里真的没有黑产品, 来吧互相伤害吧

见证奇迹的时候到了,数据被清理掉了,没有求ops给你开权限从新部署程序,没有给你的tl打电话说要临时审批一个脚本。太爽了。

执行后门工具

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

返回结果:redefine success, size :1

redefine /tmp/AggregateNoRoomService.class

  • redefine热更新代码

返回结果:classLoaderHash 1b36fa2

sc -d * AggregateNoRoomService | grep classLoaderHash

  • sc查找加载AggregateNoRoomService的ClassLoader

正常来讲是应该使用Arthasmc命令来从新编译这个修改后文件。可是我在服务器上始终没有编译成功,错误缘由之后在研究。

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

  • 将这个类从新编译成class文件

  • vim修改反编译出来的代码

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

  • 写做不易,转载请注明出处,喜欢的小伙伴能够关注公众号查看更多喜欢的文章。
  • 联系方式:4272231@163.com
  • QQ:95472323
  • 微信:ffj2000
相关文章
相关标签/搜索