SpringBoot 3.3.5 试用CRaC,启动速度提升3到10倍

文章目录

  • 一 CRaC是什么
  • 二 CRaC的原理
  • 三 CRaC 的应用场景
  • 四 支持版本
  • 五 实践

今天和小伙伴们来聊一个稍微新一点的技术话题—CRaC。

CRaC(Coordinated Restore at Checkpoint,检查点协调恢复)是一个 OpenJDK 项目,旨在解决 Java 应用程序启动和预热时间过长的问题。

Java 应用程序启动和预热时间过长是一个老大难的问题,目前来看各方也都提出了一些不同的解决思路,之前松哥和大家聊过的 AOT 也能从一定程度上解决启动慢的问题,今天的 CRaC 算是另外一种解决思路。

一 CRaC是什么

CRaC 允许对运行中的 JVM 进行“快照”,并将其状态(包括应用)存储到磁盘中。

之后,在另一个时间点,可以将 JVM 从保存的检查点恢复到内存中。

这个功能意味着你可以启动应用程序、预热并创建检查点,然后从这个检查点快速恢复,从而显著减少启动时间。

二 CRaC的原理

CRaC 的工作原理基于用户空间检查点和恢复(CRIU),这是一个为 Linux 实现检查点和恢复功能的项目。

CRIU 允许冻结容器或单个应用程序并从保存的检查点文件中恢复它。

CRaC 采用了 CRIU 的通用方法,并增加了一些增强和调整,使其适用于 Java 应用程序。

一般来说,CRaC 的执行步骤如下:

  1. 创建检查点:在应用程序运行并达到稳定状态后,可以创建一个检查点,这个检查点包含了 JVM 的状态和应用程序的数据。
  2. 存储检查点:检查点数据被存储到磁盘上,以便之后可以从中恢复。
  3. 恢复检查点:当需要启动应用程序时,可以直接从检查点恢复,而不是从头开始启动和预热 JVM。

这个感觉就有点类似于大伙平时使用的 VMWare 的快照功能,在某个时间点为系统拍摄一个快照,下次可以直接从快照启动,就比从头开始启动要快很多。CRaC 所拍快照中不仅包含 JVM,也可以包含你的应用信息。

三 CRaC 的应用场景

CRaC 特别适用于需要快速启动和恢复的场景,比如:

  • 云原生环境:在微服务和无服务器架构中,服务可能需要频繁地启动和停止,CRaC 可以显著减少服务的启动时间。
  • 开发和测试环境:开发者可以在开发和测试过程中快速恢复应用程序到某个已知状态,提高开发效率。
  • 灾难恢复:在系统发生故障时,可以快速从最近的检查点恢复服务,减少系统停机时间。

四 支持版本

从 Spring Boot3.2/Spring6.1 开始对 CRaC 的提供支持,所以如果大伙想体验 CRaC,需要选择合适的 SpringBoot 版本。

同时,由于前文提到的 CRaC 依赖于 Linux 特有的 CRIU,因此 CRaC 目前仅在Linux操作系统上支持。Windows 和 Mac 则不支持。

五 实践

首先我们需要安装支持 CRaC 的 JDK,目前主要有以下两种 JDK 支持 CRaC:

  1. Azul Zulu 21.0.1 + CRaC 版本支持 CRaC,适用于 x64 和 aarch64 CPU 架构,包括 JDK17 和 JDK21。

选择支持 CRaC 的 JDK

  1. Liberica JDK 17 和 Liberica JDK 21 提供了对 CRaC 的支持。

接下来在项目中添加 CRaC 依赖:

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

OK,如此之后,我们的准备工作就算完成了。

接下来我们需要在项目启动的时候,指定检查点的位置,并给出生成检查点的时机:

java -Dspring.context.checkpoint=onRefresh -XX:CRaCCheckpointTo=./tmp_checkpoint -jar javaboy-crac-3.3.5.jar

在上面的启动脚本中,我们通过设置 JVM 系统属性 -Dspring.context.checkpoint=onRefresh 来启用自动检查点。这个属性会在 Spring 的 LifecycleProcessor.onRefresh 阶段自动创建检查点,这个阶段在所有非延迟初始化的 Singleton 实例化和 InitializingBean#afterPropertiesSet 回调调用之后,但在生命周期启动和 ContextRefreshedEvent 发布之前。也就是说在这个时机创建检查点(拍摄快照)。

当然,如果你想等应用程序完全启动之后再拍摄快照,也是可以的。

先用如下命令启动应用程序:

java -XX:CRaCCheckpointTo=./tmp_checkpoint -jar javaboy-crac-3.3.5.jar

等待应用程序完全启动后,在另一个终端执行以下命令来手动触发检查点:

jcmd <pid> JDK.checkpoint

其中 <pid> 是应用程序的进程ID,这将创建检查点并关闭应用程序。检查点文件将存储在指定的文件夹中。

手动执行检查点生成的好处是,这个检查点包含了框架代码和应用程序代码,因此启动速度会更快,因为框架已经加载并启动了应用程序。

无论哪种方式生成检查点,只要有了检查点,最后一步就是使用这个检查点了。

我们可以利用检查点生成的文件来快速拉起应用程序,相关命令如下:

java -XX:CRaCRestoreFrom=./tmp_checkpoint

总结下就是,自动检查点适合快速实现和无需代码更改的场景,而手动检查点提供了更大的灵活性,允许在应用程序完全预热后创建检查点,从而可能实现更快的启动时间。

好啦,感兴趣的小伙伴可以去尝试下,记得选择合适的操作系统、JDK 版本以及 Spring Boot 版本哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/916032.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大模型本地部署:Ollama+MaxKB 部署本地知识库

前言 本文我们介绍另外一种部署本地知识库的方案&#xff1a; Ollama MaxKB 相对来说&#xff0c;容易安装且功能较完善&#xff0c;30 分钟内即可上线基于本地大模型的知识库问答系统&#xff0c;并嵌入到第三方业务系统中。 缺点是如果你的电脑配置不高&#xff0c;问题…

Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解

title: Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解 date: 2024/11/14 updated: 2024/11/14 author: cmdragon excerpt: schema:beforeWrite 钩子是 Vite 提供的一个功能强大的生命周期钩子,允许开发者在 JSON Schema 被写入之前执行自定义操作。利用这个钩子,您可以…

Scrapy爬取heima论坛所有页面内容并保存到数据库中

前期准备&#xff1a; Scrapy入门_win10安装scrapy-CSDN博客 新建 Scrapy项目 scrapy startproject mySpider03 # 项目名为mySpider03 进入到spiders目录 cd mySpider03/mySpider03/spiders 创建爬虫 scrapy genspider heima bbs.itheima.com # 爬虫名为heima &#…

MacBook 下载vscode不能被解压及打开的解决方案

mac 下载vscode不能被解压解决方案如下 1.下载全能解压 进行解压 解压完如果提示 已损坏&#xff0c;无法打开。 您应该将它移到废纸篓 2.允许“任何来源”开启 开启终端输入 sudo spctl --master-disable回车 3. 扩展文件属性 先输入 sudo xattr -r -d com.apple.quaran…

【AI声音克隆整合包及教程】第二代GPT-SoVITS V2:技术、应用与伦理思考

一、引言 在当今科技迅速发展的时代&#xff0c;声音克隆技术成为人工智能领域的一个备受瞩目的分支。GPT-SoVITS V2作为一种声音克隆工具&#xff0c;正逐渐进入人们的视野&#xff0c;它在多个领域展现出巨大的潜力&#xff0c;同时也引发了一系列值得深入探讨的问题。本文旨…

DAY113代码审计-PHPTP框架微P系统漏审项目等

一、环境安装 导入数据 Debug 版本信息收集 一、不安全写法的sql注入&#xff08;拼接写法绕过预编译机制&#xff09; 1、Good.php的不安全写法 2、查找可以参数 3、找路由关系 application/index/controller/Goods.php http://172.19.1.236:8833/index.php/index/goods/aj…

35.3K+ Star!PhotoPrism:一款基于AI的开源照片管理工具

PhotoPrism 简介 PhotoPrism[1] 是一个为去中心化网络设计的AI照片应用,它利用最新技术自动标记和查找图片,实现自动图像分类与本地化部署,你可以在家中、私有服务器或云端运行它。 项目特点 主要特点 浏览所有照片和视频,无需担心RAW转换、重复项或视频格式。 使用强大的…

【CUDA】了解GPU架构

目录 一、初步认识 二、Fermi架构 三、Kepler 架构 3.1 动态并行 3.2 Hyper-Q 一、初步认识 SM&#xff08;Streaming Multiprocessors&#xff09;是GPU架构中非常重要的部分&#xff0c;GPU硬件的并行性就是由SM决定的。以Fermi架构为例&#xff0c;其包含以下主要组成…

鸿蒙HarmonyOS 网络请求获取数据Http

注意的是;要为接口返回值指定类型 &#xff0c;以及定义接口数据类型 index.ets import { http } from kit.NetworkKit;interface createAtType {date: number,}interface dataListType {createAt: createAtType;imgUrl: }Component export default struct TabBar {State dat…

Windows VSCode .NET CORE WebAPI Debug配置

1.安装C#插件 全名C# for Visual Studio Code&#xff0c;选择微软的 2. 安装C# Dev Kit插件 全名C# Dev Kit for Visual Studio Code&#xff0c;同样是选择微软的 3.安装Debugger for Unity 4.配置launch.json 文件 {"version": "0.2.0","config…

Odoo:免费开源的流程制造行业ERP管理系统

概述 聚焦流程制造连续性生产的特性&#xff0c;提供集成PLMERPMESBI的一体化解决方案&#xff0c;涵盖计划、生产、质量、配方、供销、库存、成本、设备、资金管理等业务领域的整体性解决方案 行业的最新洞察&行业典型痛点 一、生产过程需要精细化控制 需要在各种制约…

ERP管理系统(源码+文档+部署+讲解)

本文将深入解析“ERP管理系统”的项目&#xff0c;探究其架构、功能以及技术栈&#xff0c;并分享获取完整源码的途径。 系统概述 ERP管理系统是一款全面的资源规划软件&#xff0c;旨在通过集成各种业务流程和功能模块来提高管理效率和决策质量。该系统覆盖了从基础设置、供…

mysql每日一题(上升的温度,date数据的计算)

日期之间的运算 日期类型的加法运算 data_add(now_data,interval 1 month) select date_add(now(), interval 1 day); -- 加1天 select date_add(now(), interval 1 hour); -- 加1小时 select date_add(now(), interval 1 minute); -- 加1分钟 select date_add(now(), inter…

CTF攻防世界小白刷题自学笔记13

1.fileinclude,难度&#xff1a;1,方向&#xff1a;Web 题目来源:宜兴网信办 题目描述:无 给一下题目链接&#xff1a;攻防世界Web方向新手模式第16题。 打开一看给了很多提示&#xff0c;什么language在index.php的第九行&#xff0c;flag在flag.php中&#xff0c;但事情显…

FFmpeg 4.3 音视频-多路H265监控录放C++开发十三.2:avpacket中包含多个 NALU如何解析头部分析

前提&#xff1a; 注意的是&#xff1a;我们这里是从avframe转换成avpacket 后&#xff0c;从avpacket中查看NALU。 在实际开发中&#xff0c;我们有可能是从摄像头中拿到 RGB 或者 PCM&#xff0c;然后将pcm打包成avframe&#xff0c;然后将avframe转换成avpacket&#xff0…

LabVIEW环境监测系统

随着环境问题的日益严重&#xff0c;环境参数的实时监测成为保障公共健康和生态平衡的重要手段。开发了一款基于LabVIEW开发的环境监测系统&#xff0c;能够对大气中的温度、湿度及二氧化硫浓度进行实时监测&#xff0c;并提供数据存储和超阈值报警功能。 系统组成 本系统由下…

【视觉SLAM】2-三维空间刚体运动的数学表示

读书笔记&#xff1a;学习空间变换的三种数学表达形式。 文章目录 1. 旋转矩阵1.1 向量运算1.2 坐标系空间变换1.3 变换矩阵与齐次坐标 2. 旋转向量和欧拉角2.1 旋转向量2.2 欧拉角 3. 四元数 1. 旋转矩阵 1.1 向量运算 对于三维空间中的两个向量 a , b ∈ R 3 a,b \in \R^3 …

SystemVerilog学习笔记(十):进程/细粒度进程控制

进程 进程或线程是作为独立实体执行的任何代码片段。fork-join块创建并行运行的不同线程。在下面的图-1中&#xff0c;可以看到进程的类型和进程控制。 序号进程描述1.fork-join只有所有子线程执行完毕时&#xff0c;父线程才会执行。2.fork-join_any只有任何一个子线程执行完…

【Visual Studio系列教程】如何在 VS 上编程?

上一篇博客中&#xff0c;我们介绍了《什么是 Visual Studio&#xff1f;》。本文&#xff0c;我们来看第2篇《如何在 VS 上编程&#xff1f;》。阅读本文大约10 分钟。我们会向文件中添加代码&#xff0c;了解 Visual Studio 编写、导航和了解代码的简便方法。 本文假定&…

【3D Slicer】的小白入门使用指南八

3D Slicer DMRI(Diffusion MRI)-扩散磁共振认识和使用 0、简介 大脑解剖 ● 白质约占大脑的 45% ● 有髓神经纤维(大约10微米轴突直径) 白质探索 朱尔斯约瑟夫德杰林(Jules Joseph Dejerine,《神经中心解剖学》(巴黎,1890-1901):基于髓磷脂染色标本的神经解剖图谱)…