记录一次 Arthas 使用

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 疫情期间,在家办公,每天都是 007,感觉自己已经升级为熊猫特工了,心累,身体疲惫!!!今天终于有时间休息一下,然后记录一下在家办公期间 Arthas 的简单使用。

冯富杰.jpeg

【Arthas 官方社区正在举行征文活动,参加即有奖品拿~点击投稿

前言

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

今天终于有时间休息一下,然后记录一下在家办公期间 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 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的公众号。”

相关文章
|
4月前
|
Arthas 测试技术
Arthas调试案例:Trace案例
Arthas调试案例:Trace案例
|
Arthas SQL Java
Arthas之WatchSql
在使用Arthas排查线上问题的时候,有些时候我们需要查看某些Sql的生成,如果线上没有完备的APM的话,那么如何临时查看呢,前几篇文章我们分析了Mybatis的插件机制,如果你还记得的话,我们可以通过watch这个插件进行查看。
1636 1
Arthas之WatchSql
|
Arthas 监控 Cloud Native
用 Arthas 神器来诊断 HBase 异常进程
HBase 集群的某一个 RegionServer 的 CPU 使用率突然飙升到百分之百,单独重启该 RegionServer 之后,CPU 的负载依旧会逐渐攀上顶峰。多次重启集群之后,CPU 满载的现象依然会复现,且会持续居高不下,慢慢地该 RegionServer 就会宕掉,慢慢地 HBase 集群就完犊子了。
用 Arthas 神器来诊断 HBase 异常进程
|
4月前
|
Arthas Java 测试技术
Arthas基础使用篇
Arthas基础使用篇
|
6月前
|
Arthas Java 测试技术
Arthas 使用
Arthas 使用
38 0
|
7月前
|
Arthas Java 测试技术
Arthas 排查JVM问题总结
Arthas 排查JVM问题总结
224 0
Arthas 排查JVM问题总结
|
10月前
|
Arthas Java 测试技术
Arthas可以对线上jar中的代码进行断点查看
Arthas可以对线上jar中的代码进行断点查看
1984 1
|
Arthas 消息中间件 监控
|
Arthas Java 测试技术
Arthas之ClassLoaderLoadClass
在使用Arthas排查线上问题的时候,有些时候我们需要查看某些类有没有被加载,或者这个类的静态成员变量到底有没有被打包,又或者需要load测试一下是否正常,那么这个时候可以通过本文进行相关的操作了。
289 0
Arthas之ClassLoaderLoadClass
|
Arthas 监控 Java
使用阿里arthas 定位oom问题原因
1,最近我们生产服务器在做营销活动的时候突然发生oom,堆内存溢出。这个很让人头疼, 我们开发排查了好长时间,最终找到了问题的所在。这里我先买一个关子,问题的原因大家看完文章就一清二白了。
使用阿里arthas  定位oom问题原因