当前位置:   article > 正文

springboot内存占用大_Spring Boot 2.4新特性减少95%内存占用问题

升级springboot 2.4 后 idea内存

节省 95%的内存占用,减少 80%的启动耗时。

graalvm 是一种高性能的虚拟机,它可以显著的提高程序的性能和运行效率,非常适合微服务。最近比较火的 java 框架 quarkus 默认支持 graalvm

下图为 quarkus 和传统框架(springboot) 等对比图,更快的启动速度、更小的内存消耗、更短的服务响应。

spring boot 2.4 开始逐步提供对 graalvm 的支持,旨在提升上文所述的 启动、内存、响应的使用体验。

安装 graalvm

目前官方社区版本最新为 20.3.0 ,是基于 openjdk 8u272 and 11.0.9 定制的,可以理解为 openjdk 的衍生版本

官方推荐的是 sdkman 用于快速安装和切换不同版本 jdk 的工具 ,类似于 nodejs 的 。

使用类似命令即可完成指定版本安装和指定默认版本

sdk install java 11.0.9.hs-adpt

sdk default java 11.0.9.hs-adpt

不过安装过程中需要从国外下载相关资源 ,笔者在尝试后使用体验并不是很好,所有建议大家下载指定版本 graalvm 安装即可(和 jdk 安装方式一样)。

安装成功查看版本

⋊> ~ java -version 11:30:34

openjdk version "11.0.9" 2020-10-20

openjdk runtime environment graalvm ce 20.3.0 (build 11.0.9+10-jvmci-20.3-b06)

openjdk 64-bit server vm graalvm ce 20.3.0 (build 11.0.9+10-jvmci-20.3-b06, mixed mode, sharing)

安装 native-image

native-image 是由 oracle labs 开发的一种 aot 编译器,应用所需的 class 依赖项及 runtime 库打包编译生成一个单独可执行文件。具有高效的 startup 及较小的运行时内存开销的优势。

但 graalvm 并未内置只是提供 gu 安装工具,需要我们单独安装。

- 切换到 jdk 的安装目录

⋊> ~ cd $java_home/bin/

- 使用gu命令安装

⋊> ./gu install native-image

初始化 spring boot 2.4 项目

spring initializr 创建 demo 项目

curl https://start.spring.io/starter.zip -d dependencies=web \

-d bootversion=2.4.1 -o graal-demo.zip

先看一下启动基准数据 , 单纯运行空项目 需要 1135 ms 秒

java -jar demo-0.0.1-snapshot.jar

engine: [apache tomcat/9.0.41]

2020-12-18 11:48:36.856 info 91457 --- [ main] o.a.c.c.c.[tomcat].[localhost].[/] : initializing spring embedded webapplicationcontext

2020-12-18 11:48:36.856 info 91457 --- [ main] w.s.c.servletwebserverapplicationcontext : root webapplicationcontext: initialization completed in 1135 ms

内存占用情况

ps aux | grep demo-0.0.1-snapshot.jar | grep -v grep | awk '{print $11 "\t" $6/1024"mb" }'

/usr/bin/java480.965mb

支持 graalvm

增加相关依赖,涉及插件较多完整已上传 gitee gist

org.springframework.experimental

spring-graalvm-native

0.8.3

org.springframework

spring-context-indexer

spring-milestones

spring milestones

https://repo.spring.io/milestone

main 方法修改,增加属性 proxybeanmethods = false

@springbootapplication(proxybeanmethods = false)

使用 native-image 构建可执行文件

mvn -pnative package

#构建过程比较慢,日志如下

spring.factories files...

[com.example.demo.demoapplication:93430] classlist: 4,633.58 ms, 1.18 gb

_____ _ _ __ __ _

/ ___/ ____ _____ (_) ____ ____ _ / | / / ____ _ / /_ (_) _ __ ___

\__ \ / __ \ / ___/ / / / __ \ / __ `/ / |/ / / __ `/ / __/ / / | | / / / _ \

___/ / / /_/ / / / / / / / / / / /_/ / / /| / / /_/ / / /_ / / | |/ / / __/

/____/ / .___/ /_/ /_/ /_/ /_/ \__, / /_/ |_/ \__,_/ \__/ /_/ |___/ \___/

/_/ /____/

...

[com.example.demo.demoapplication:93430] [total]: 202,974.38 ms, 4.23 gb

编译结果

在 targe 目录生成 名称为 com.example.demo.demoapplication 可执行文件

启动应用 这里执行的编译后的可执行文件而不是 jar

cd target

./com.example.demo.demoapplication

启动时间 0.215 seconds

2020-12-18 12:30:40.625 info 94578 --- [ main] com.example.demo.demoapplication : started demoapplication in 0.215 seconds (jvm running for 0.267)

看一下内存占用 24.8203mb

ps aux | grep com.example.demo.demoapplication | grep -v grep | awk '{print $11 "\t" $6/1024"mb" }'

./com.example.demo.demoapplication24.8203mb

数据对比

是否引入 graalvm

内存占用

启动时间

480.965mb

1135 ms

24.8203mb

215 ms

到此这篇关于spring boot 2.4新特性减少95%内存占用问题的文章就介绍到这了,更多相关spring boot 2.4新特性内容请搜索萬仟网以前的文章或继续浏览下面的相关文章希望大家以后多多支持萬仟网!

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/616119
推荐阅读
相关标签
  

闽ICP备14008679号