使用CRaC机制为Java应用创建checkpoint

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

posted @   漠孤烟  阅读(180)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示