searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

基于JDK17-CRaC技术的java启动加速技术

2024-10-14 09:40:32
7
0

什么是CRaC

aboullaite.me/what-the-crac/

 

出自Azul system,也是基于CRIU技术的一个java 进程保存,恢复的技术

azul.com/products/components/crac/

目前open jdk 17 集成了CRaC

其他更高版本没有,需要使用Azul版本的OPEN JDK版本才行

 

使用spring boot 3.2 + jdk 17进行CRaC 验证:

my.oschina.net/klblog/blog/10946547

总结

CRaC 当前只是初步支持,有些场景:比如内存里维护了复杂状态的应用,可能会遇到问题,启用前请谨慎做好全场景的测试。

 

遇到的问题

1、JDK 依赖问题

CRaC 特性依赖 JDK 特性支持,目前 openjdk 发行版只支持到 JDK17。如果在不支持的 JDK 下启用 CRaCCheckpointTo,则会输出:

Unrecognized VM option 'CRaCCheckpointTo'
Error: Could not create the Java Virtual Machine.Error: A fatal exception has occurred. Program will exit.

CRaC 最早是 Azul 发起的一个项目,可以用 Azul 的社区发行版来验证 CRaC 特性,如:

  • docker image:azul/zulu-openjdk:21-jdk-crac

2、GC 算法问题

ZGC 算法下,不支持 CRaC,在 ZGC 启用时,会输出:

Error: Could not create the Java Virtual Machine.Error: A fatal exception has occurred. Program will exit.
-XX:+UseZGC is currently unsupported for -XX:CRaCCheckpointTo.

为了验证 CRaC 功能,只好先移除 -XX:+UseZGC

3、打开的 FD & Socket 问题

CRaC 要求应用程序关闭所有打开的文件、网络连接等。在 Linux 上,这些内容表示为文件描述符。但是,可能很难更改应用程序以与检查点正确协调,例如,由于无法修改库中的代码。在这些情况下,CRaC 通过配置提供有限的处理。

 

理论上所有的资源都需要向 JVM 注册资源的 Checkpoint 前后的资源状态,Spring 内置的依赖都处理好了这一步,但是三方依赖就会有一些异常

 



  • Openjdk 发行版并未全部覆盖支持,目前支持的最高版本是 JDK17。更高版本的支持只能用 Azul 的 JDK

  • 当前还有非常多的集成问题,且大量第三方包并没有做适配,Azul 官方给的 resource-policies 解决方案还属于初步阶段

  • Spring Boot 3.2 也是初步支持,Issue 区有大量集成的问题

 

0条评论
0 / 1000
张****钏
15文章数
1粉丝数
张****钏
15 文章 | 1 粉丝
原创

基于JDK17-CRaC技术的java启动加速技术

2024-10-14 09:40:32
7
0

什么是CRaC

aboullaite.me/what-the-crac/

 

出自Azul system,也是基于CRIU技术的一个java 进程保存,恢复的技术

azul.com/products/components/crac/

目前open jdk 17 集成了CRaC

其他更高版本没有,需要使用Azul版本的OPEN JDK版本才行

 

使用spring boot 3.2 + jdk 17进行CRaC 验证:

my.oschina.net/klblog/blog/10946547

总结

CRaC 当前只是初步支持,有些场景:比如内存里维护了复杂状态的应用,可能会遇到问题,启用前请谨慎做好全场景的测试。

 

遇到的问题

1、JDK 依赖问题

CRaC 特性依赖 JDK 特性支持,目前 openjdk 发行版只支持到 JDK17。如果在不支持的 JDK 下启用 CRaCCheckpointTo,则会输出:

Unrecognized VM option 'CRaCCheckpointTo'
Error: Could not create the Java Virtual Machine.Error: A fatal exception has occurred. Program will exit.

CRaC 最早是 Azul 发起的一个项目,可以用 Azul 的社区发行版来验证 CRaC 特性,如:

  • docker image:azul/zulu-openjdk:21-jdk-crac

2、GC 算法问题

ZGC 算法下,不支持 CRaC,在 ZGC 启用时,会输出:

Error: Could not create the Java Virtual Machine.Error: A fatal exception has occurred. Program will exit.
-XX:+UseZGC is currently unsupported for -XX:CRaCCheckpointTo.

为了验证 CRaC 功能,只好先移除 -XX:+UseZGC

3、打开的 FD & Socket 问题

CRaC 要求应用程序关闭所有打开的文件、网络连接等。在 Linux 上,这些内容表示为文件描述符。但是,可能很难更改应用程序以与检查点正确协调,例如,由于无法修改库中的代码。在这些情况下,CRaC 通过配置提供有限的处理。

 

理论上所有的资源都需要向 JVM 注册资源的 Checkpoint 前后的资源状态,Spring 内置的依赖都处理好了这一步,但是三方依赖就会有一些异常

 



  • Openjdk 发行版并未全部覆盖支持,目前支持的最高版本是 JDK17。更高版本的支持只能用 Azul 的 JDK

  • 当前还有非常多的集成问题,且大量第三方包并没有做适配,Azul 官方给的 resource-policies 解决方案还属于初步阶段

  • Spring Boot 3.2 也是初步支持,Issue 区有大量集成的问题

 

文章来自个人专栏
函数计算
9 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0