使用GraalVM优化项目启动速度

背景

我有一个基于SpringBoot的非Web类型的小项目,比单纯输出个hello word复杂不了多少。每次运行都会先启动SpringBoot应用,然后才执行具体的任务,应用启动的过程大约1.5-1.6秒,任务执行时间相比启动时间少到可以忽略。过去用的不多,所以也还能接受,现在加了些功能,使用频率上来了就想优化下。

环境和配置

  • Arch Linux
  • AMD Ryzen 7 5800H with Radeon Graphics (16) @ 4.463GHz
  • 内存16G
  • Java22
  • Spring Boot 3.3.1
  • GraalVM Native Build Tools (用来生成本地可执行文件,不是必须的,安装过程看这里,还有其他方法)

关于安装GraalVM Native Build Tools过程的一些补充:

  • 安装成功后你应该能看到类似这样的输出
    在这里插入图片描述
  • 如果你是在命令行下以交互式的方式配置的环境变量,这个环境变量只会在当前shell下有效,关闭当前shell后就没了。要想一直生效需要把它写到shell的配置文件里去。如果你用的是bash, 就写到.bashrc里,没有就创建一个。用的shell可以通过echo $SHELL查看

使用maven生成

mvn -Pnative native:compile生成的可执行文件在target目录下

处理报错

如果构建好运行的时候遇到类似这种错误

this appears to be a native image, in which case you may need to configure reflection for the class that is to be deserialized

在这里插入图片描述
使用Tracing Agent来处理,首先生成jar包,然后执行以下命令
java -agentlib:native-image-agent=config-output-dir=./src/main/resources/META-INF/native-image -jar ./target/application.jar 如果目录META-INF/native-image不存在就创建一个。项目启动后重新调用之前报错的方法,运行完后退出应用(ctrl-c), 再次生成原生镜像即可。如果有其他方法报类似的错误,重复上述过程。

优化结果

优化后瞬间就能出结果,效果相当炸裂

jar包 原生镜像
文件大小 26M 89M
启动速度 1.593s 0.054s
构建时间 1.749s 1m 58s

你可能感兴趣的:(spring,boot)