arthas是否支持动态执行代码?

3npbholx  于 2022-10-20  发布在  其他
关注(0)|答案(3)|浏览(366)
  • 我已经在 issues 里搜索,没有重复的issue。

背景

  1. 项目是一个Java实现的长连接有状态的服务器程序(比如游戏服务器端)
  • 线上出现问题时,通常需要一种排查方式或者解决办法

  • 输入一段代码,编译,加载,执行

  • 代码段可以输入项目任何项目的公共api调用,然后输出内存数据排查

  • 调试环境下,类似ide debug下可以执行一段表达式代码,然后execute

  • 之前的线上环境,我们是直接用了如beanshell脚本,直接编写beanshell脚本,调用已有api获取数据,然后动态执行

疑问

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

思路

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

x7yiwoj41#

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

pgx2nnw8

pgx2nnw82#

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

3zwjbxry

3zwjbxry3#

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

相关问题