使用 JVM 进行检查点和恢复
协调检查点恢复 (CRaC) 是一个 OpenJDK 项目,它定义了一个新的 Java API,允许你在 HotSpot JVM 上对应用程序进行检查点和恢复。它基于 CRIU,这是一个在 Linux 上实现检查点/恢复功能的项目。
其原理如下:你像往常一样启动应用程序,但使用支持 CRaC 的 JDK 版本,例如 BellSoft Liberica JDK with CRaC 或 Azul Zulu JDK with CRaC。然后在某个时刻,可能在执行一些工作负载以通过运行所有常见代码路径来预热 JVM 之后,你可以使用 API 调用、jcmd
命令、HTTP 端点或其他机制触发检查点。
然后,运行中的 JVM 的内存表示(包括其预热状态)被序列化到磁盘,以便稍后快速恢复,可能是在另一台具有类似操作系统和 CPU 架构的机器上。恢复的进程保留了 HotSpot JVM 的所有功能,包括运行时进一步的 JIT 优化。
基于 Spring Framework 提供的基础,Spring Boot 为应用程序的检查点和恢复提供支持,并在有限范围内开箱即用地管理诸如 Socket、文件和线程池等资源的生命周期。对于其他依赖项以及可能处理此类资源的应用程序代码,预计需要额外的生命周期管理。
你可以在 Spring Framework JVM 检查点恢复支持文档 中找到有关支持的两种模式(“按需对运行中的应用程序进行检查点/恢复”和“启动时自动检查点/恢复”)、如何启用检查点和恢复支持以及一些指南的更多详细信息。