1

そこで、CRIU を使用して JVM プロセスのスナップショットを作成し、後で復元したいと考えています。この目的のために、毎秒カウンターを出力するだけの小さなプログラムを書きました。

package some;

public class Fun {
    public static void main(String[] args) throws InterruptedException {
        for(int i = 0; i < Integer.valueOf(args[0]); i++) {
            System.out.println("Counter: "+i);
            Thread.sleep(1000);
        }       
    }   
}

プログラムを実行すると、プログラム$ java some.Fun 3000は秒を表示し始めます。

criu を使用してプロセスを保存する場合$ ps -auxは、Java プロセスの PID (この場合は 3503) を見つけて、criu を呼び出します$ criu dump -t 3503 -o dump.log --shell-job。その後、カウンターのある端末はカウントを停止し、印刷Killedして終了するようです。

criu を呼び出したフォルダーのこの時点で、プロセスを復元するために使用できるいくつかのダンプ ファイルを取得しました。$ criu restore -o dump.log --shell-job

そうすると、新しい PID を持つ新しいプロセスが作成され、カウンターは停止した瞬間からカウントを開始します。良い!

ただし、プロセスを強制終了し、同じダンプ ファイルを使用してプロセスを復元しようとするとします。これを行うと、 criu はメッセージですぐに終了しますAborted (core dumped)。同じJavaバージョンの別のマシンにファイルを転送して、そこで実行しようとすると、同じことが起こります...

今私の質問は:そうあるべきですか?一度だけ状態を復元できるはずですか?それとも私は何か間違ったことをしていますか?前もって感謝します!

4

1 に答える 1