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