[alibaba/arthas]arthas是否支持动态执行代码?

2022-10-09 554 views
2
背景
  1. 项目是一个Java实现的长连接有状态的服务器程序(比如游戏服务器端)
  2. 线上出现问题时,通常需要一种排查方式或者解决办法
    • 输入一段代码,编译,加载,执行
    • 代码段可以输入项目任何项目的公共api调用,然后输出内存数据排查
  3. 调试环境下,类似ide debug下可以执行一段表达式代码,然后execute
  4. 之前的线上环境,我们是直接用了如beanshell脚本,直接编写beanshell脚本,调用已有api获取数据,然后动态执行
疑问

想问一下arthas是否提供类似功能

思路
  • 其实之前自己实现也比较简单。服务器端提供一个解析脚本接口,输入是.java(或者源文件字符串)。服务器端收到后,动态编译、加载、执行。
  • 不过如果arthas直接支持就更好了

回答

4

如果用的框架是spring,可以获取Spring Context然后调用对应方法执行逻辑。
至于背景3,arthas好像并没有提供断点之类的功能,是否可以使用watch 监控每个变量的值自行运算结果

6

其实需求就是动态执行代码,这段代码是完全自定义的。类似如beanshell servlet,和使用什么框架没有关系

1

支持直接执行代码,或者 .class是没有难度的。主要是这个权限太大了,很容易出事,所以没有做。

9

对,这个是不好的地方。但是优势是线上可以快速定位问题啊,可以直接查内存数据或者执行代码恢复逻辑等,就是起到了脚本的作用。arthas如果从工具支持的角度来说,是可以添加的。希望慎重考虑一下

8

哈哈,和我想得一样,一直搜不到什么好方案