使用 Spring Boot 和 GraalVM 实现原生(系列三)
三分钟编译本机测试,然后,如果成功,则编译本机应用程序本身。本机映像在此过程中使用了多达 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 兆字节。好多了。此应用程序还将每秒处理更多请求。因此,编译和执行速度更快,内存效率更高,启动速度更快,并且可以处理更多流量。我会说,到处都是很多交易。
- 点赞
- 收藏
- 关注作者
评论(0)