作者:鲍凤其
爱可生 dble 团队开发成员,主要负责 dble 需求开发,故障排查和社区问题解答。少说废话,放码过来。
-
https://github.com/alibaba/arthas -
https://github.com/alibaba/arthas/blob/master/README_CN.md -
https://www.cnkirito.moe/arthas-redefine/ -
https://manuals.jrebel.com/jrebel/standalone/maven.html -
https://manuals.jrebel.com/jrebel/advanced/launch-quick-start.html#quick-start
-
arthas -
jrebel
前置环境
-
jre,使用 dble 的 jre 即可 -
搭建好的 3.20.10.0 版本 dble 环境
arthas 使用
安装
$ cd /opt/arthas
$ wget https://github.com/alibaba/arthas/releases/download/arthas-all-3.4.5/arthas-bin.zip
$ unzip arthas-bin.zip
使用
java -jar arthas-boot.jar <dble_pid>
jad 反编译
source-only com.actiontech.dble.server.ServerQueryHandler > /tmp/ServerQueryHandler.java jad --
case 254: {
LOGGER.info("Unsupported statement:" + sql);
this.service.writeErrMessage(1149, "Unsupported statement");
return;
}
sc 查找类加载器
sc -d com.actiontech.dble.server.ServerQueryHandler | grep classLoaderHash
classLoaderHash 18b4aac2
mc 内存编译
在编译之前可以将之前反编译源码文件里的代码修改掉,比如修改为如下片段:
case 254: {
LOGGER.info("Unsupported statement test test test test test:" + sql);
this.service.writeErrMessage(1149, "Unsupported statement");
return;
}
redefine 热更新代码
其实在这里我们也可以通过在本地修改对应版本的源文件,本地编译好后上传到 /tmp/com/actiontech/dble/server/ 路径下,再执行 redefine,效果是一样的:
$ redefine /tmp/com/actiontech/dble/server/ServerQueryHandler.class
redefine success, size: 1, classes:
com.actiontech.dble.server.ServerQueryHandler
$ java -jar arthas-boot.jar <dble_pid> -c "redefine /tmp/com/actiontech/dble/server/ServerQueryHandler.class" > /dev/null
通过此方式,可以更方便的通过脚本管理整个流程。
分布式 | Prepare Statement 协议游标可行性
社区近期动态
本文分享自微信公众号 - 爱可生开源社区(ActiontechOSS)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。