gpt4 book ai didi

java - Jenkins 上的 PowerMock 内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-04 06:22:12 29 4
gpt4 key购买 nike

我认为使用 Jenkins 执行单元测试时出现内存泄漏。如果我尝试执行超过 60 个单元测试,大多数测试都会因 java.lang.OutOfMemoryError: PermGen space 失败。通常(但并非总是如此),堆栈跟踪似乎开始于 org.powermock.core.classloader.MockClassLoader 中或附近,尽管它并不一致。 maven Surefire 插件配置非常简单:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18</version>
<executions>
<execution>
<phase>test</phase>
<configuration>
<reuseForks>false</reuseForks>
<argLine>-XX:PermSize=512m -XX:MaxPermSize=1024m</argLine>
</configuration>
</execution>
</executions>
</plugin>

在 Jenkins 中,MAVEN_OPTS 也设置为 -XX:MaxPermSize=1024m

我看到一些文档表明这可能与我使用旧版本的 powermock 有关,因此我升级到了 1.6.0,但我仍然遇到此错误。

我无法在本地重现该问题,它似乎只发生在 Jenkins 服务器上。

我不确定如何可靠地解决这个问题:限制执行的测试用例的数量似乎工作正常,但我有 150 多个测试用例要执行,并且在服务器上一次运行 50 个测试的批处理似乎不是一个很好的解决方案。我也许可以给它多一点内存,但看起来它已经足够了,而且我认为 Surefire 在本地运行时不需要那么多内存。可能有一种方法可以使用其他一些万无一失的设置,但我不确定需要调整哪些设置,或者如何调整。有没有其他人见过这个,或者对如何解决这个问题有建议?

<小时/>

这可能是相关的:开发环境是 IBM 的 RAD,工作区是使用选项 -Xgcpolicy:gencon 启动的,据我所知,这是特定于 IBM 的 JVM 实现的。这可能是当我从 RAD 运行 Maven 而不是从 Jenkins 运行 Maven 时单元测试运行良好的原因吗?如果是这样,Jenkins 使用的标准 (Oracle) JVM 的等效选项是什么?

最佳答案

问题已经解决了。我从来没有弄清楚内存泄漏在哪里,但我注意到在控制台中,maven 会 fork for certainfire 但从未包含我通过 <argLine> 传递的参数。当我向 Maven 命令添加相同的参数时:

mvn test -DargLine="-XX:MaxPermSize=1024m -Xmx768m"

所有测试都执行良好,没有出现内存不足问题。所以我认为<argLine>元素可能无法正常工作。

关于java - Jenkins 上的 PowerMock 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27297426/

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