记录一次Arthas使用
2020/2/29 17:44:49
本文主要是介绍记录一次Arthas使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
在疫情期间,首先要为武汉加油,中国加油!!!
在家办公,每天都是007,感觉自己已经升级为熊猫特工了,心累,身体疲惫!!!
今天终于有时间休息一下,然后记录一下在家办公期间Arthas的简单使用。
下载安装
下载安装就不多说了。直接贴官网教程。
下载:curl -O alibaba.github.io/arthas/arth…
启动:java -jar arthas-boot.jar
这里需要重点说明一下:必须使用和目标进程相同的用户,否则启动不成功。
问题背景
本人前天刚上线一个任务。由于某产品手误,误操作了线上数据,要求帮忙把数据删除了。
这尼玛的真坑啊,明显是坑老子。
还好有先见之明,没次做任务的时候多多少少都会写几个后门工具(不是为了删库跑路,而是这些后门在特定情况下真能应急使用,求人不如求己)。但是这次后门工具还有改造一下才行,大半夜的又找不到人来帮你上线,自己又没有权限。这时候想起了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
正常来说是应该使用Arthas的mc命令来重新编译这个修改后文件。但是我在服务器上始终没有编译成功,错误原因以后在研究。
这里就不过说明了,简单的程序直接javac x x x x.java就可以了,但是我这个类里面还依赖了其他的类型,所以我是用maven直接编译的整个Java项目,然后但是把这个新的class文件copy出来然后上传到服务器的。
将这个类重新编译成class文件
vim修改反编译出来的代码
这里有保密协议限制,包路径已经打码,小伙伴们直接看过程就可以了。
- 写作不易,转载请注明出处,喜欢的小伙伴可以关注公众号查看更多喜欢的文章。
- 联系方式:4272231@163.com
- QQ:95472323
- 微信:ffj2000
这篇关于记录一次Arthas使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南
- 2024-09-30Dnd-Kit学习:新手快速入门指南