我们的Jython环境存在问题,这意味着在对PythonInterpreter对象进行了一定数量的eval调用后,我们遇到了“Out of permgen memory”错误。
有没有人有这方面的经验以及如何解决它?
我们目前正在运行Jython 2.5.2。
以下是用于重复调用解释器的代码的摘录。
public Map<String, String> invoke(Map<String, String> parameters) {
//logger.info("Executing script for parameters: " + parameters);
this.interpreter.set("inputDict", parameters);
PyDictionary dict = (PyDictionary)this.interpreter.eval(ScriptComposer.mainMethodName + "(inputDict)");
//logger.info("Done executing script for parameters: " + parameters);
return dict;
}
答案 0 :(得分:1)
好吧,我想我已经找到了问题,所以为了帮助其他人遇到这个问题,我会发一些提示。
对于2.5.2之前的Jython版本,确实存在关于类生成和类引用保持的错误,这意味着在对eval / exec进行一定数量的调用之后,会遇到上述问题。
然而,当使用Jython版本2.5.2及更高版本时,本身没有任何问题,但是当在不同线程上同时使用多个PythonInterpreter对象时,永久生成对象(类和静态成员)所需的内存会引发,所以你必须使用以下命令启动您的VM:
-XX:PermSize=$START_JVM_PERMSIZE -XX:MaxPermSize=$MAX_JVM_PERMSIZE
因此增加了为永久生成对象分配的开始和最大内存。
希望这有助于其他人更快地解决这个问题。