我正在开发一个服务器应用程序,可以通过用户提供的Groovy脚本进行扩展.很明显,我想确保这些脚本在非常紧凑的沙箱中运行,它们不会破坏核心应用程序代码或消耗太多资源来使服务器过载.
我已经研究了各种可能性,最终解决方案可能是这些的组合:
在非常有限的安全管理器中运行脚本.该脚本在无权限的SecurityManager中运行.必须声明其他权限(如Android).
启动一个新的JVM.在Runtime.exec周围创建一个ScriptProcess包装器,并使用安全管理器,有限的堆等生成新的JVM.因为我们启动了一个完整的流程,我们可能会对监视器的不良行为进行更多的控制?虽然资源成本很可怕......另一种方法是在这里使用Ant,但它是否可扩展?
Java Monitor API在Java 6中,有一个具有监视能力的包.我们可以监视线程,也可以检测无限循环和内存消耗.有人用这个吗?
这些是我今天想到的.确保这些脚本正常运行并保持一定的可伸缩性和性能的最佳方法是什么?