乐趣区

记录一次-Arthas-使用

【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 反编译代码
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 进去而后上传到服务器的。

失常来说是应该应用 Arthasmc命令来从新编译这个批改后文件。然而我在服务器上始终没有编译胜利,谬误起因当前在钻研。

  • sc 查找加载 AggregateNoRoomService 的 ClassLoader

sc -d * AggregateNoRoomService | grep classLoaderHash

返回后果:classLoaderHash 1b36fa2

  • redefine 热更新代码

redefine -c 1b36fa2 /tmp/AggregateNoRoomService.class

返回后果:redefine success, size :1

这是时候能够在应用 jad 命令,在反编译一下这个类,看看是不是真正更新胜利了。

执行后门工具

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

然而我在这里还是强调一下,最好还是慎用,毕竟走正规流程还不不必背锅的。(这么做很容背锅,而且产品小哥或者产品小姐姐下次会间接找你帮我修复点数据呗,间接绕过了你领导或下级。_阐明我这里真的没有黑产品,来吧相互挫伤吧_)

总结

Arthas 其实还是很弱小的,能够帮咱们排查线上问题,环境容许的状况倡议能够应用,会带来很多便当,这里就过多阐明了。

Arthas 征文活动炽热进行中

Arthas 官网正在举办征文活动,如果你有:

  • 应用 Arthas 排查过的问题
  • 对 Arthas 进行源码解读
  • 对 Arthas 提出倡议
  • 不限,其它与 Arthas 无关的内容

    欢送加入征文活动,还有奖品拿哦~ 点击投稿

“阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术畛域、聚焦云原生风行技术趋势、云原生大规模的落地实际,做最懂云原生开发者的公众号。”

退出移动版