当前位置: 首页 > 知识库问答 >
问题:

Quarkus原生可执行文件构建:高内存消耗

蓬英逸
2023-03-14

我正在使用多阶段Docker构建构建Quarkus本机可执行文件,如Quarkus-构建本机可执行文件中所述

我的项目只包含了Hello World——示例,其中添加了一些ORM功能(因此没有太多依赖项)。构建工作正常,但我的问题是,它在构建期间会消耗大量内存。这意味着最高可达6Gib。在我看来,构建时间也很长(总共约4-6分钟)。

当我在构建我们的CI/CD基础设施时,问题就开始了。我们没有那么多内存,因此生成失败,出现错误:映像生成请求失败,退出状态为137

是我做错了什么,还是这只是正常的行为?是否有可能至少减少内存消耗?

共有3个答案

墨承泽
2023-03-14

现在,您可以限制Quarkus的内存使用:

在src/main/resources/application中。属性文件,只需设置:

quarkus.native.native-image-xmx=2G

或者将此选项传递给maven:

mvn package -Dnative -Dquarkus.native.native-image-xmx=2G
邵亦
2023-03-14

@ben的回答是正确的,但也许更精确一些是有用的。你必须编辑pom。xml入门目录中,编辑本机配置文件并添加

  <profile>
        <id>native</id>
        <activation>
            <property>
                <name>native</name>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>io.quarkus</groupId>
                    <artifactId>quarkus-maven-plugin</artifactId>
                    <version>${quarkus.version}</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>native-image</goal>
                            </goals>
                            <configuration>
                                <enableHttpUrlHandler>true</enableHttpUrlHandler>
                <additionalBuildArgs>-J-Xmx2G</additionalBuildArgs>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-failsafe-plugin</artifactId>
                     ...
                </plugin>
            </plugins>
        </build>
    </profile>

景子安
2023-03-14

感谢肯和卢卡·布尔加佐利!所以,GraalVM使用

人们可以通过指定-J-Xmx2G作为addtionalBuildArgs-参数来限制内存消耗为Quarkus-maven-plugin。但这可能会增加构建时间。

 类似资料:
  • 我已经使用quarkus maven插件创建了一个quarkus应用程序。 我的maven pom如下: 但是,当我尝试使用 ,我会收到以下错误消息,独立于平台。 我承认我没有创建任何类型的主类,因为quarkus似乎不需要它。但是我如何向Java平台声明我打算让quarkus决定主类呢? 编辑为了回应c. twitter,这里有更多的信息 内容是 我很确定你们中的一些人会要求清单。MF含量 我认

  • 我遵循了构建quarkus本机可执行文件的步骤。 1.引导项目: 2.在minishift中使用docker 3.生成包: 失败,错误跟踪如下: 根据要求,树输出如下所示:

  • 我想使用pyInstaller的单文件夹模式,但我不想每次都收集所有依赖项。 大多数情况下,我可以重用它以前打包的所有依赖项,我只需要可执行文件,我想如果我能在构建过程中尽快停止,我会在构建过程中节省10~20分钟。exe文件已生成。 我知道用-F标志将所有依赖项打包到一个可执行文件中,但这不是我想要的。我只希望pyInstaller在打包步骤之前停止。 我希望生成在可能输出时立即停止:

  • 我尝试使用docker构建一个Quarkus本机可执行文件,使用以下命令““ Quarkus版本:2.2.1.最终Maven版本:3.8.1Java版本:11

  • 构建失败 我跟着https://quarkus.io/guides/building-native-image-guide#creating-a-container. 这两种方法都会产生朴素的图像可执行文件。