从此
📄文章 #️⃣专题 🌐酷站 👨‍💻技术 📺 📱

🏠 » 📄文章 » 内容

 欢迎来访!

CRaC还原checkpoint内存快照 加速Java应用启动

🕗2024-07-13👁️1

CRaC

Coordinated Restore at Checkpoint,译成中文即:从检查点原样恢复重启。
大致的原理是将JVM的当前运行状态进行持久化存储起来,相当于存储某一刻运行时的快照,给那一刻的JVM运行状态进行拍照即为检查点。再启动服务时直接通过该快照文件恢复至运行状态。通过检查点恢复启动的速度比原始启动要快不少,从而实现缩短应用启动速度。

https://github.com/CRaC

条件

引依赖

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

开启CRaC参数

/app/jdk-21.0.3-crac/bin/java -jar -Dspring.context.checkpoint=onRefresh -Djdk.crac.resource-policies=crac.yml -XX:CRaCCheckpointTo=checkpoint myapp.jar &
  • /app/jdk-21.0.3-crac/bin/java这里使用的是JDK绝对路径,以方便一机多个JDK共存并在运行app时指定CRaC功能的JDK进行运行。
  • -Dspring.context.checkpoint=onRefresh是spring触发检查点的时机。
  • -Djdk.crac.resource-policies=crac.yml指定检查点触发时不进行转存储的状态的配置文件,主要有三类(文件、socket、pipe)
  • -XX:CRaCCheckpointTo=checkpoint是指定把检查点触发的快照文件存储的目录

crac.yml

type: socket
localAddress: *
remoteAddress: *
localPort: *
remotePort: *
family: ip
action: ignore
---
type: file
path: /opt
action: ignore
---
type: file
path: /tmp
action: ignore
---
type: pipe
action: ignore

关于crac.yml配置文件格式及值的说明,详见:

https://docs.azul.com/core/crac/fd-policies