JVM 的检查点与恢复
Coordinated Restore at Checkpoint(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 检查点恢复支持文档。