使用 Spring Boot 和 GraalVM 实现原生(系列三)

举报
小云悠悠zZ 发表于 2023/01/30 15:53:13 2023/01/30
【摘要】 三分钟编译本机测试,然后,如果成功,则编译本机应用程序本身。本机映像在此过程中使用了多达 10.25 GB 的 RAM。为了使事情进展得更快,我将跳过本文中的编译和运行测试。

三分钟编译本机测试,然后,如果成功,则编译本机应用程序本身。本机映像在此过程中使用了多达 10.25 GB 的 RAM。为了使事情进展得更快,我将跳过本文中的编译和运行测试。因此,当我们编译以下示例时,请使用:

mvn -Pnative -DskipTests clean package

编译时间因应用程序类路径而异。有趣的是,如果我跳过编译测试,我的大多数构建都需要一分钟到 90 秒。例如,此应用程序包括JPA(和Hibernate),Spring Data,H2数据库,Apache Tomcat和Spring MVC。

运行应用程序:

./target/jpa 

在我的机器上,我看到:

…Started TraditionalApplication in 0.08 seconds (JVM running for 0.082)

不错!80毫秒,或千分之八十秒!更好的是,此应用程序几乎不占用内存。我使用以下脚本来测量应用程序的RSS(驻留集大小)。

#!/usr/bin/env bash  
PID=$1
RSS=`ps -o rss ${PID} | tail -n1`
RSS=`bc <<< "scale=1; ${RSS}/1024"`
echo "RSS memory (PID: ${PID}): ${RSS}M"

需要正在运行的应用程序的进程 ID (PID)。我可以通过运行在macOS上获取它。我像这样使用脚本:pgrep jpa

~/bin/RSS.sh $(pgrep jpa)
RSS memory (PID: 35634): 96.9M

近 97 兆字节的内存!这些数字可能因您运行的操作系统和体系结构而异。英特尔 Linux 上的数字将与 M1 上的 macOS 上的数字不同。当然,这是对任何 JRE 应用程序的显着改进,但不是我们能得到的最好的。

我喜欢响应式编程,我认为它更适合我今天的工作负载。我整理了一个类似的反应式应用程序。它不仅占用了相当少的空间(原因有很多,包括Spring Data R2DBC支持Java 17的辉煌记录语法),而且应用程序在1:14(快了近两分钟!)编译,并在0.044秒内启动。而且它占用的 RAM 减少了 35%,即 63.5 兆字节。好多了。此应用程序还将每秒处理更多请求。因此,编译和执行速度更快,内存效率更高,启动速度更快,并且可以处理更多流量。我会说,到处都是很多交易。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。