阿里Arthas一次使用体验

场景

目前,线上有一台服务器,运行一段时间后,开始卡顿,接口调用基本花了2-10s,而且日志没有记录到关键信息
记录花费时间的日志都被注释掉了。

因为场景复现不一定成功,所以考虑用热更新代码,把关键耗时信息打印出来。经过考虑和同事的建议,线上最后使用阿里的Arthas进行代码热更新,将耗时信息打印出来,定位哪块代码有问题。

此项目是基于docker部署的springboot项目,所以jar包是在docker容器里的。
首先,进入容器
docker container exec -it appName /bin/bash 进入容器内部
curl -O https://arthas.aliyun.com/arthas-boot.jar 下载jar包
java -jar arthas-boot.jar 启动jar包

通过jad反编译源码,然后修改java文件,在mc 内存编译回class文件,这条路走失败了,至于原因不了解,可能是类立马依赖关系太复杂,强制转换等原因导致mc执行失败
通过百度查询到,其实可以直接把class文件传到服务器做热更新,于是立马git切换分支到线上版本,然后修改代码后编译,将class文件丢到服务器,然后使用docker cp className.class appName:/wordkdir命令,将class文件丢到容器里。
在arthas里运行更新代码命令redefine className.class,运行成功。线上代码被改变成功

于是意识到,其实对于arthas,我应该要学习更多

posted @ 2021-09-04 16:53  自律のalive  阅读(246)  评论(0)    收藏  举报