【发布时间】:2016-08-14 00:29:08
【问题描述】:
我正在尝试在 cluster 上运行使用 WEKA libraries 的 java 程序。
这个集群在 12 小时后提交的作业超时,我无法改变这个事实,因为我是学生并且不负责集群。
我想要做的是保存我的 JVM 的状态,然后重新加载它。基本上关闭程序一段时间,然后从我离开的地方继续。
这可能吗?
我认为我不能(至少很容易)将 WEKA 对象本身的变量状态输出到带有 OOS 的文件中并重新加载它们,因为我使用的是 WEKA 库,而且它会非常复杂重写这些机器学习程序的代码。 (虽然这可能是我必须做的)
我尝试使用一个名为 javaflow 的库,我认为通过阅读它可能会完成此任务,但我无法让它工作。当尝试做它的计数示例时,我遇到了这个错误:
Apr 20, 2016 9:15:12 PM org.apache.commons.javaflow.bytecode.StackRecorder execute
SEVERE: stack corruption. Is class test_javaflow.MyRunnable instrumented for javaflow?
java.lang.IllegalStateException: stack corruption. Is class test_javaflow.MyRunnable instrumented for javaflow?
at org.apache.commons.javaflow.bytecode.StackRecorder.execute(StackRecorder.java:102)
at org.apache.commons.javaflow.Continuation.continueWith(Continuation.java:170)
at org.apache.commons.javaflow.Continuation.startWith(Continuation.java:129)
at org.apache.commons.javaflow.Continuation.startWith(Continuation.java:102)
at test_javaflow.Test_Javaflow.main(Test_Javaflow.java:16)
在谷歌上搜索这个错误会找到一些与 JasperSoft 相关的页面,我很确定这不是我想要的。
【问题讨论】:
-
你试过在虚拟机上运行JVM吗?由于 Vmware 和 VirtualBox 等虚拟化工具提供了保存整台机器状态的解决方案。您可以运行机器并保存状态,然后几天后按原样加载它。
-
我还没有尝试在虚拟机上运行它。我想这是可能的。我得问问集群负责人。
-
要回答标题中的问题,您在程序结束时将状态写入文件,并在再次启动程序时读取该文件。您可以使用参数、XML、JSON 或任何其他对您的文件有意义的格式。
-
这不是我想要的。我需要它基本上从崩溃中恢复。
标签: java weka savestate suspend continuation