Spring Boot 3.2.0 试用CRaC,启动速度提升3到10倍

发布时间 2023-12-02 14:57:21作者: 漠孤烟

CRaC(Coordinated Restore at Checkpoint)。

CRaC 是 OpenJDK 项目,能够把运行中的 JVM,将其状态(包括您的应用程序)存储到磁盘中。然后,在另一个时间点,您可以从保存的检查点将 JVM 恢复到内存中。通过这种方式,可以启动一个应用程序,预热它,并创建一个检查点。从保存的检查点恢复到内存主要依赖于磁盘 I/O,这意味着速度非常快(在毫秒级别)。

JDK及环境准备

目前支持CRaC的JDK是Azul Zulu 21.0.1(选择含CRaC版本的),且系统只支持Linux。

或直接访问以下链接进行下载:

https://cdn.azul.com/zulu/bin/zulu21.30.23-ca-crac-jdk21.0.1-linux_x64.tar.gz

程序准备

maven添加依赖

<dependency>
  <groupId>org.crac</groupId>
  <artifactId>crac</artifactId>
  <version>1.4.0</version>
</dependency>

Spring Boot 3.2.0启用CRaC

java -Dspring.context.checkpoint=onRefresh -XX:CRaCCheckpointTo=./tmp_checkpoint -jar spring-petclinic-3.2.0.jar

启动速度有几倍的提升,有评测显示,最多甚至高达10倍的提升。

启动后,本地会生成检查点映像文件

如启动报错,可试试授权非root用户:

sudo chown root:root $JAVA_HOME/lib/criu
sudo chmod u+s $JAVA_HOME/lib/criu

以上整理,参考自:

https://mp.weixin.qq.com/s/sIxb1YVL4rUVSNbWuU4XOA
https://foojay.io/today/springboot-3-2-crac/