我一直在测试Quarkus,以检查是否值得更换成本,当运行只有resteasy
和jsonb
的空Quarkus项目时,RAM占用仅为 5MB 。但是在仅从大型项目中添加一些实体后,该项目已增长到 100MB ,我发现这是一种滥用行为,就像在春季,整个项目正在使用 180MB 。
复制存储库:https://github.com/KevinGuancheDarias/quarkus-owge-poo
本机运行(需要docker
)
$ mvn package -Pnative -Dquarkus.native.container-build=true -DskipTests
$ docker build --no-cache -f src/main/docker/Dockerfile.native -t quarkus/test .
$ docker run -i --rm -p 8080:8080 quarkus/test
用于测试尺寸的命令
docker stats 2985d8366e51 32db5040f6e7
样本输出,其中owge_all_dockerized ....是在Docker中运行的完整项目,而suspicious_borg是quarkus测试
Quarkus扩展名:agroal, cdi, hibernate-orm, hibernate-orm-panache, jdbc-mysql, mutiny, narayana-jta, resteasy, resteasy-jsonb, smallrye-context-propagation
这是预期的RAM使用量吗?
更新:仅删除hibernate ORM
,但保留agroal
和jdbc-mysql
,会使内存下降到 6MB
更新:请注意,quarkus测试和在Spring boot中运行的整个项目都将立即启动和停止,而GC没有时间填充内存了
提前谢谢!。
答案 0 :(得分:1)
本机graalvm执行与运行传统Java / jar时具有不同类型的内存管理。
详细信息可以在https://www.graalvm.org/reference-manual/native-image/MemoryManagement/中找到,但是基本上它会在内存中更加积极地增长,但是您可以通过添加-mx 10m
来限制它。那么它将不会超过10 mb-如果足够满足您的应用程序就可以了。
当然,如果您的应用实际上需要更多,请增加它。