跳到主要内容

使用 JVM 进行检查点与恢复

DeepSeek V3 中英对照 Checkpoint and Restore With the JVM

协调检查点恢复(CRaC)是一个 OpenJDK 项目,它定义了一个新的 Java API,允许你在 HotSpot JVM 上对应用程序进行检查点和恢复。它基于 CRIU,这是一个在 Linux 上实现检查点/恢复功能的项目。

其原理如下:您几乎像往常一样启动您的应用程序,但使用的是启用了 CRaC 的 JDK 版本,例如 BellSoft Liberica JDK with CRaCAzul Zulu JDK with CRaC。然后在某个时间点,可能是在执行一些工作负载以通过执行所有常见代码路径来预热您的 JVM 之后,您可以通过 API 调用、jcmd 命令、HTTP 端点或其他机制触发检查点。

然后,运行中的 JVM 的内存表示(包括其预热状态)会被序列化到磁盘,从而允许在稍后的时间点快速恢复,甚至可以在具有类似操作系统和 CPU 架构的另一台机器上进行。恢复后的进程保留了 HotSpot JVM 的所有功能,包括在运行时的进一步 JIT 优化。

基于 Spring Framework 提供的基石,Spring Boot 支持应用程序的检查点与恢复功能,并在有限范围内开箱即用地管理诸如套接字、文件和线程池等资源的生命周期(详见此处)。对于其他依赖项,以及可能涉及这些资源的应用程序代码,预计将提供额外的生命周期管理支持。

你可以在 Spring Framework JVM 检查点恢复支持文档 中找到关于两种支持模式(“按需检查点/恢复运行中的应用程序”和“启动时自动检查点/恢复”)的更多详细信息,如何启用检查点和恢复支持以及一些指导原则。