利用 CRaC,将 Java 应用程序恢复启动时间缩短到几毫秒
![](/theme/default/default/images/main/eye-open.png)
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
![](/theme/default/default/images/main/icon-jing.png)
摘要
BellSoft发布了带有检查点协调恢复(CRaC)功能的Liberica JDK 17和21版本。此功能让开发者可以在任意时间点创建运行中应用程序的快照,并能在几毫秒内使用快照恢复应用状态。CRaC基于Linux的CRIU技术,只支持Linux系统下的x86_64和AArch64 CPU架构。
CRaC能够保存应用程序的状态,包括Java堆、JIT编译代码、本机内存和设置等。开发者需要确保快照中不包含敏感数据。CRaC允许通过JavaRandom类生成的种子来实现快照恢复时的随机数可预测性,但建议使用Java SecureRandom类来增强随机性。协调检查点和恢复确保应用在暂停和重启时能够处理网络连接和文件描述符,也支持在应用未准备好时取消检查点。
启动带有CRaC功能的应用需要指定保存JVM数据的目录。创建快照则通过jcmd命令实现,恢复时则指定包含快照的目录。尽管其他方案如GraalVM的AOT编译和Quarkus的AppCDS也能加速应用启动,它们并不支持运行时的JIT编译优化。
Bellsoft建议,CRaC适合于短时间运行、低CPU限值、需要复制和频繁重启的应用。CRaC最初由Azul开发,现为OpenJDK项目的一部分,已被包括Spring Boot、Quarkus、Micronaut和AWS Lambda SnapStart在内的工具支持。更多信息可参考Bellsoft性能架构师Dmitry Chuyko的博文。
想要了解更多内容?
![](/theme/default/default/images/main/icon-jing.png)
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)