使能JBooster特性
介绍
- 云场景下,应用有着“单个云应用实例分配资源少”与“云应用频繁地弹性伸缩”的特点,传统JVM应用启动慢的问题在此场景下更为严重。
- 云应用所需的CPU资源是由其启动时的负载与稳定运行时的负载(或业务峰值时所需负载)综合决定的。
- JBooster特性通过数据共享、远程编译等形式来提升应用启动速度、降低CPU占用、加快弹性伸缩的响应速度、降低云应用部署成本。
场景建议
CPU资源受限、类加载耗时长或编译耗时占比高,导致启动耗时长。
使用约束
- 当毕昇JDK版本为17时支持JBooster特性,从毕昇JDK 17.0.12及之后的版本开始支持。
- 客户端和服务端均部署在同一信任域内,由用户确保通信安全。
- 服务端编译AOT需要系统中安装ld指令。
- 基于RPM包管理的操作系统(CentOS、Fedora、openEuler等)使用yum安装ld指令:
1
yum install binutils
- 基于Debian包管理的操作系统(Ubuntu、Debian等)使用apt安装ld指令:
1
apt install binutils
- 基于RPM包管理的操作系统(CentOS、Fedora、openEuler等)使用yum安装ld指令:
使用方法
- 开启服务端JBooster Server。
服务端启动成功后会输出“The JBooster server is ready!”。使用JBooster Server的整个过程中需要保持服务端为启动状态,不能手动停止,如需执行其他命令需启动新的窗口。
1
$JAVA_HOME/bin/jbooster --server-port=<port>
上述命令中的端口号<port>用户可自定义,端口限制范围为1024~65535。
使用jbooster --help命令来查看支持的命令行参数。
1
$JAVA_HOME/bin/jbooster --help
- 构建应用程序包。
本文以spring-petclinic-*.*.*-SNAPSHOT.jar为例进行应用程序的构建。构建过程中依赖maven工具,请确保构建环境已安装maven。
请参见https://github.com/spring-projects/spring-petclinic?tab=readme-ov-file#run-petclinic-locally构建应用程序包spring-petclinic-*.*.*-SNAPSHOT.jar。1 2 3 4 5 6 7
git clone https://github.com/spring-projects/spring-petclinic.git wget https://dlcdn.apache.org/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.tar.gz tar -xf apache-maven-3.9.6-bin.tar.gz export PATH=$PWD/apache-maven-3.9.6/bin:$PATH cd spring-petclinic git reset --hard 2daa3993ee8dce8ec72cf96bc5ef7aee6e36f8fb mvn package -DskipTests=true
mvn的使用可能需要配置代理,请自行按实际情况配置。
构建成功后,会在“./target”文件夹中生成一个jar包,jar包名称为spring-petclinic-*.*.*-SNAPSHOT.jar,其版本号随代码仓更新而变化。
- 启用客户端。
第一次启用客户端,生成加速包,JBoosterAddress需指定服务端的地址,端口号需和服务端一致。本文中的应用程序spring-petclinic-3.2.0.jar启动成功后会输出“(process running for X.XXX)”的日志,其中“X.XXX”即启动时间。客户端启动成功后可以使用CTRL+C键停止。
1
$JAVA_HOME/bin/java -XX:+UnlockExperimentalVMOptions -XX:+UseJBooster -XX:JBoosterAddress=127.0.0.1 -XX:JBoosterPort=<port> -jar ./target/spring-petclinic-*.*.*-SNAPSHOT.jar
后续启用客户端可以获得加速效果,命令与第一次启用客户端一致,日志输出显示启动时间有比较明显的减少。上述命令中的端口号<port>用户可自定义,与1中的<port>保持一致即可。