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 提供了对应用程序检查点和恢复的支持,并 在有限的范围内 开箱即用地管理诸如套接字、文件和线程池等资源的生命周期。对于其他依赖项以及可能涉及这些资源的应用程序代码,预计还需要额外的生命周期管理。
你可以在 Spring Framework JVM 检查点恢复支持文档 中找到有关两种支持模式(“按需检查点/恢复正在运行的应用程序”和“启动时自动检查点/恢复”)、如何启用检查点和恢复支持以及一些指南的更多详细信息。