Quarkus 原生图像大小

标签 quarkus graalvm graalvm-native-image

当我使用 quarkus 构建应用程序的 native 镜像时,我得到一个大小为 150MB 的可执行文件(关联的 jar 大小为 12MB,我怀疑 Substrate VM 是否能弥补所有这些空间)。这是正常现象还是我做错了什么?有没有办法进行调查,例如记录 native 镜像中加载的内容?

 $ du -sh target/placeholder-1.0.0-SNAPSHOT-runner                                                                                                                     1.9m  mar. 06 juil. 2021 00:13:58
150M    target/placeholder-1.0.0-SNAPSHOT-runner
 $ du -sh target/placeholder-1.0.0-SNAPSHOT.jar                                                                                                                               mar. 06 juil. 2021 00:14:32
12M     target/placeholder-1.0.0-SNAPSHOT.jar

最佳答案

是的,二进制文件的大小可以大于 jar 文件。 它主要由两部分组成:编译为二进制的应用程序代码和“图像堆”,即应用程序的预初始化数据结构和组件。 例如,如果您的应用程序在构建时初始化任何类,那么这些类的静态字段的值将被序列化到图像堆中。这可以帮助应用程序启动,因为它不需要再次初始化这些,但它也可以使二进制文件更大。

您可以为 native 镜像构建过程启用报告选项和 tools that help you make sense图像的内容。

从上面链接的文章中,您可以在此处使用 -H:+DashboardAll 选项和仪表板工具(它托管在 github 上并离线工作):https://www.graalvm.org/docs/tools/dashboard/?ojr=dashboard

然后它可以可视化占用空间的内容,例如如下所示: https://miro.medium.com/max/2400/1*mWIhq53ALPiI2GP-IQkYoQ.png

关于Quarkus 原生图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68262920/

相关文章:

docker - 为 micronaut 应用程序构建 native 镜像

kotlin - Quarkus Vert.x 示例

java - Quarkus读取 `ResultSet`并使用多线程进行处理

java - 如何让 Graal SDK 包在没有 Maven 的情况下工作?

java - Quarkus - 在运行时打开数据库连接

quarkus - 如何在 Quarkus 运行时更改日志级别

java - 如何调试 Quarkus/SmallRye 客户端请求

java - JavaScript 事件处理程序使用什么宿主对象

java - 使用自定义类路径使用 GraalVM native 镜像命令行?