使用CRaC机制为Java应用创建checkpoint
CRaC
Coordinated Restore at Checkpoint,翻译为中文:从检查点原样恢复重启。
大致的原理是将JVM的当前运行状态进行持久化存储起来,相当于存储某一刻运行时的快照,给那一刻的JVM运行状态进行拍照即为检查点。再启动服务时直接通过该快照文件恢复至运行状态。通过检查点恢复启动的速度比原始启动要快不少,从而实现缩短应用启动速度。
条件
- 操作系统:得有CRIU功能,CRIU(Checkpoint/Restore In Userspace),目前只有Linux系列的OS有该功能。
- JDK版本: 17及以上,建议17或21
- OpenJDK发行版,目前支持CRaC的JDK有两家:
- Zulu JDK: 发行商为Azul,下载地址:https://www.azul.com/downloads/?version=java-17-lts&os=centos&architecture=x86-64-bit&package=jdk-crac#zulu
- Liberica JDK: 发行商为Bellsoft,下载地址:https://bell-sw.com/pages/downloads/?version=java-17&os=linux&bitness=64&package=jdk-crac&release=17.0.11%2B13
- Spring Boot: 3.2.x及以上
引依赖
<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配置文件格式及值的说明,详见:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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)