【问题标题】:JenkinsX - Build fail due to Java Heap spaceJenkins - 由于 Java 堆空间导致构建失败
【发布时间】:2019-04-17 04:35:29
【问题描述】:

我正在使用 JenkinsX 在 GKE 上为 Spring Boot 应用程序创建 CI/CD 管道。一旦我将代码推送到 master 分支,就会触发构建,但由于 Java 堆空间不足,构建会失败。

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:3.2.2:war (default-war) on project location-finder-api: Error assembling WAR: Problem creating war: Execution exception: Java heap space -> [Help 1]

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-war-plugin:3.2.2:war (default-war) on project location-finder-api: Error assembling WAR: Problem creating war: Execution exception
Caused by: java.lang.OutOfMemoryError: Java heap space

    at org.codehaus.plexus.archiver.zip.ByteArrayOutputStream.needNewBuffer (ByteArrayOutputStream.java:153)

    at org.codehaus.plexus.archiver.zip.ByteArrayOutputStream.write (ByteArrayOutputStream.java:192)

为了解决这个问题,我尝试将 Docekrfile 中的 JVM 参数设置为

CMD ["java", "-Xmx1024m","-jar", "app.jar"]

但它没有工作。这是我在构建开始时看到的

+ mvn -e clean deploy -Pprod

Picked up _JAVA_OPTIONS: -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Dsun.zip.disableMemoryMapping=true -XX:+UseParallelGC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Xms10m -Xmx192m

OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N

有什么方法可以让我自己设置这个堆选项?

【问题讨论】:

    标签: jenkins-x


    【解决方案1】:

    看起来 maven 内存不足,因此您需要在构建 pod(而不是应用程序的 Dockerfile)中有更多内存。

    作为快速测试,您可以在 Jenkins UI 中编辑 pod 模板:jx console,然后是 Manage Jenkins -> Configure System,然后在 UI 中找到 jenkins-maven pod 模板,并根据以下值编辑 _JAVA_OPTIONS 环境变量:@987654321 @ - 尝试将 -Xmx512m 更改为更大的名称,例如 -Xmx912m

    一旦您找到适合您的项目的值,您可以通过将其添加到您的 myvalues.yaml 来永久更改 Jenkins 的重启 - 类似这样...

    # myvalues.yaml
    jenkins:
      Agent:
        PodTemplates:
          Maven:
            Name: maven
            Label: jenkins-maven
            EnvVars:
              _JAVA_OPTIONS: '-XX:+UnlockExperimentalVMOptions -Dsun.zip.disableMemoryMapping=true -XX:+UseParallelGC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Xms10m -Xmx912m'
    

    请参阅creating/configuring builders 上的文档

    【讨论】:

    • 此解决方案适用于构建。但现在的问题是,如果我点击 URL(使用 jx open --env staging),它会返回 503。我是否需要为 nginx 做任何设置,因为我知道 Jenkinsx 将应用程序部署在 nginx 服务器后面?
    • jx open 是否在开发命名空间中工作 - 例如你可以查看 Jenkins / Nexus 吗? Jenkins X 的安装应该安装用于所有环境 + 命名空间和所有导出的服务/Web 应用程序/REST API 的入口控制器。如果入口不起作用,则可能是您使用的域。你在前提吗?见jenkins-x.io/getting-started/install-on-cluster/…
    • 是的,jx open 命令有效。它为 jenkins、nexus、jenkins-x-chartmuseum、jenkins-x-docker-registry、jenkins-x-monocular-api、jenkins-x-monocular-ui 提供输出。如何检查入口控制器是否已部署?我不是前提。 Jenkinsx 部署在 Google Kubernetes Engine 上。
    • 我重新安装了 jx。在日志中,我可以看到安装了 nginx。 INFO[0463] nginx 入口控制器已安装和配置。请告诉我,我该如何解决这个问题?
    • 我正在做的项目已经在 Spring boot 中开发了。所以我正在使用 jx 导入。我检查了使用 jx create 创建所有演示应用程序的所有演示。 jx create. 环境设置是否有任何差异?此外,我的应用程序不依赖于 Spring 启动执行器。 pom.xml中是否必须添加依赖?
    猜你喜欢
    • 2018-04-29
    • 2017-05-29
    • 2018-04-22
    • 2015-09-04
    • 1970-01-01
    • 2023-01-02
    • 2018-01-12
    • 2011-11-21
    • 1970-01-01
    相关资源
    最近更新 更多