Как сохранить состояние Java-программы и забрать его позже?
Я пытаюсь запустить программу Java, которая использует WEKA libraries
на cluster
,
Этот кластер истекает через 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, и я уверен, что это не то, что я ищу.
1 ответ
Посмотрите на команду контрольной точки докера. Он предоставляет возможность сохранить текущее состояние контейнера докера и затем возобновить его. Я использовал его для аналогичного использования - системы на основе JVM. В моем случае я использую его, потому что инициализация занимает много времени. Используя контрольную точку, я могу перезапустить контейнер в известном состоянии несколько раз.