gpt4 book ai didi

java - 为 Maven 将分拆的子 JVM 进程设置 permgen 大小

转载 作者:搜寻专家 更新时间:2023-10-30 21:30:01 24 4
gpt4 key购买 nike

我正在 Jenkins 构建服务器上构建 Maven Java 应用程序。我在 Jenkins 上构建期间多次遇到 java.lang.OutOfMemoryError: PermGen space(但从未在我的本地主机上),因此我的构建失败。

我已经尝试为 Jenkins 设置 MAVEN_OPTS:我进入 Jenkins-->Manage Jenkins-->Configure system -->Global MAVEN_OPTS 并设置为 -Xms512m -Xmx1024m -XX:MaxPermSize=512m -XX:PermSize=512m。尽管将其设置为如此高的值,我们仍然会遇到 PermGen 空间问题。我不想将 MAVEN_OPTS 设置为更高的值;我看不出我的应用程序如何需要大量空间,我宁愿深入研究高内存使用率问题。

最近,我一直在想,也许 permgen 空间问题不是来自 Maven 本身,而是来自 Maven 衍生出来的 JVM 进程之一(例如:插件)。我提出这个假设是因为 Maven 仍然能够正常执行 TestNG 测试,尽管已经吐出我们的 permgen 空间错误行。导致 PermGen 错误的插件之一是 Jetty:

Oct 31, 2012 7:55:37 AM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: handle failed
java.lang.OutOfMemoryError: PermGen space

因此,我想知道:

MAVEN_OPTS 变量是否也适用于 Maven 构建衍生出来的子 JVM 进程?如果没有,那么如何为 Jetty 等子进程设置 JVM 选项?

注意:我使用的是 Maven 3.0.4。

最佳答案

大多数生成 Java 进程的 Maven 插件都有自己指定 JVM 命令行参数的方式。例如,您可以使用 argLine 配置参数(参见 http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#argLine)在 Surefire 插件生成的进程中配置堆和 permgen 大小。

Jetty 插件不会生成进程,因此堆和 permgen 由提供给 Maven 进程的 JVM 参数控制。

如果您在从 Jenkins 运行时内存不足但在本地运行时没有内存不足,请检查 Jenkins 传递给 Maven 的 MAVEN_OPTS。

关于java - 为 Maven 将分拆的子 JVM 进程设置 permgen 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13161387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com