【问题标题】:java.lang.OutOfMemoryError: PermGen with Jenkins and Mavenjava.lang.OutOfMemoryError:使用 Jenkins 和 Maven 的 PermGen
【发布时间】:2014-01-18 01:47:54
【问题描述】:

我在 Jenkins 工作中遇到以下异常:-

java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at org.powermock.core.classloader.MockClassLoader.loadUnmockedClass(MockClassLoader.java:201)
at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:149)
at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:67)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at org.apache.log4j.LogManager.<clinit>(LogManager.java:86)
at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:64)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:270)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281)

......

我在这项工作中通过 Maven 运行我的 Junit 测试用例。正如 Jenkins 所建议的,我有一个新的全局属性 MAVEN_OPTS,其值高达 -XX:MaxPermSize=1024m
但我仍然继续收到java.lang.OutOfMemoryError: PermGen

非常感谢任何帮助。

【问题讨论】:

    标签: maven junit jenkins


    【解决方案1】:

    PowerMock 存在由类加载内容引起的内存泄漏:https://code.google.com/p/powermock/issues/detail?id=346

    您可以为 log4j 类使用默认的类加载器:

    @RunWith(PowerMockRunner.class)
    @PowerMockIgnore(value = {"org.apache.log4j.*"})
    public class YourTest {
        ...
    }
    

    【讨论】:

      【解决方案2】:

      感谢 Stefan 的回答。不幸的是,添加默认的 log4j 类加载器并没有解决我的问题。但是您提供的链接解决了这个问题。

      我必须在“maven-surefire-plugin”定义中添加以下配置:-

      <argLine>-XX:PermSize=512m -XX:MaxPermSize=1024m</argLine>
      

      这解决了我的问题。

      【讨论】:

      • 我今天遇到了类似的问题,发现这是 PowerMock 和 Log4j 的问题,因为我将记录器实例化为我要模拟的类中的静态变量。这会导致 PermGen 中的内存泄漏。 Stefan 写的使用默认类加载器的方法最终解决了这个问题,尽管我不得不写@PowerMockIgnore({ "javax.management.*", "org.apache.logging.*", "org.apache.xerces.*" })。我认为仅仅增加 PermSize 的方法并没有解决问题,但可能没问题,因为这种内存泄漏只发生在单元测试期间。
      猜你喜欢
      • 2014-06-21
      • 2011-09-04
      • 2012-11-25
      • 2014-09-02
      • 2012-07-31
      • 1970-01-01
      • 2016-06-07
      相关资源
      最近更新 更多