You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins服务器Maven测试任务内存升至20GB 内存泄漏问题根因咨询

Surefire插件内存不释放问题根本原因分析
  • Surefire插件Fork策略配置错误
    默认配置下surefire会复用同一个fork进程运行所有测试用例,5000个项目文件对应的测试类、实例对象会持续在同一个surefirebooter进程中堆积,且Java 13已经完全移除永久代,你配置的maxPermSize参数本身就不会生效。另外你在Maven主进程或者Jenkins任务行配置的Xmx参数仅作用于Maven主进程,不会传递给fork出来的surefirebooter子进程,所以内存限制配置完全不生效。
    正确的子进程内存+fork策略配置示例如下:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.1.2</version>
    <configuration>
        <!-- 每运行一批测试用例就销毁旧fork进程,避免内存堆积 -->
        <forkCount>1</forkCount>
        <reuseForks>false</reuseForks>
        <!-- 单独配置surefire子进程的内存上限 -->
        <argLine>-Xmx2g -XX:MaxMetaspaceSize=512m</argLine>
    </configuration>
</plugin>
  • Selenium资源泄漏
    Web自动化测试中每个用例启动的WebDriver实例、浏览器进程,如果没有在测试结束的生命周期方法(TestNG的@AfterMethod/@AfterClass)中显式调用quit()方法销毁,对应的驱动对象、页面缓存对象会持续驻留在surefirebooter进程的堆内存中,累计到一定量级就会触发内存溢出。
  • 测试用例层面的内存泄漏
    如果测试用例中存在静态集合类持续缓存测试数据、大对象(比如接口返回的报文、页面截图字节流)没有主动置空、测试上下文对象没有销毁的情况,这些对象会一直被GC Root引用,无法被垃圾回收,随着测试用例持续运行内存占用会线性上涨。
  • 版本兼容性缺陷
    你使用的Maven 3.6.0配套的默认Surefire插件版本对Java 13的模块化内存管理、Metaspace回收适配不完善,存在已知的堆外内存泄漏问题,旧版本插件的surefirebooter进程不会主动释放未使用的堆外内存,会导致内存占用持续走高。

内容的提问来源于stack exchange,提问作者Sam polo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:57:03