首页 > 解决方案 > 出现错误“ [junit] java.lang.OutOfMemoryError: PermGen space

问题描述

我们在 linux 服务器上运行 Junits。突然间,我们开始遇到 permGen 空间问题。下面是我们用来设置空间的参数。最大烫发大小的默认值为 174063616

ANT_OPTS=-Xmx4098m
export ANT_OPTS

JAVA_OPTS=-Xmx16392m
export JAVA_OPTS

在得到 permgen 空间问题后,我更改了参数的值,如下所述。但仍然没有运气。

ANT_OPTS=-Xmx4098m
export ANT_OPTS

JAVA_OPTS=-Xmx32784m
export JAVA_OPTS

标签: javalinuxunit-testingjunitant

解决方案


如果您有与“permGen”空间相关的内存分配错误,这意味着您使用 Java 7 或更低版本运行。因此,作为旁注,如果您运行 Java 8 或更高版本,则不应再看到此错误,因为该空间本身不再存在,并且仅限于可用的本机内存。

管理 PermGen 空间的 JVM 选项是XX:MaxPermSize. 因此,您应该在 JVM 中添加运行单元测试这个命令行参数:-XX:MaxPermSize=256m.

环境变量将ANT_OPTS配置 Ant 本身使用的 JVM。如果单元测试没有作为分叉运行,您应该使用这个环境变量。

如果您在 Ant 派生的 JVM 中运行单元测试,那么您应该告诉 Ant 使用一些额外的 JVM 参数来启动 Junit 任务。您需要使用的参数是jvmarg.

有关该任务,请参阅 Ant 官方文档:https ://ant.apache.org/manual/Tasks/junit.html

因此,这是用于设置正确属性的 XML 片段:

<junit fork="yes">
    <jvmarg value="-XX:MaxPermSize=256m" />
</junit>

推荐阅读