PermGen空间与码头

时间:2014-02-05 14:21:42

标签: java maven jetty maven-3

我正在开发一个java web应用程序,我使用mavenlike项目管理工具。现在我的麻烦在于,如果我以这种方式每20秒设置一次自动扫描码头:

<!-- To launch embded jetty server -->
       <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>${maven-jetty-plugin.version}</version>
            <configuration>
                <scanIntervalSeconds>10</scanIntervalSeconds>
                <webAppConfig>
                    <contextPath>/${project.name}</contextPath>
                    <extraClasspath>target/classes;../services/target/classes;</extraClasspath>
                </webAppConfig>
                <scanTargets>
                    <scanTarget>target/classes</scanTarget>
                    <scanTarget>../services/target/classes</scanTarget>
                </scanTargets>
            </configuration>
        </plugin>

Jetty以正确的方式开始实际上我得到了:

  

[INFO]启动了Jetty服务器

     

[INFO]以20秒的间隔启动扫描仪。

但是在第一次扫描时我得到以下错误:

  

错误ContextLoader - 上下文初始化失败

     

java.lang.OutOfMemoryError:PermGen space

我该如何解决?

更新1

我尝试以这种方式从Eclipse Ide增加PermGen空间:

enter image description here

但在第一次扫描后我又收到了同样的错误。

我该如何解决?

3 个答案:

答案 0 :(得分:4)

你试过在JDK8下运行吗? PermGen已被MetaSpace取代,可能会修复您的PermGen问题:http://www.infoq.com/news/2013/03/java-8-permgen-metaspace

Jetty还有一些关于防止可能填满permgen的类加载器泄漏的文档:http://www.eclipse.org/jetty/documentation/current/preventing-memory-leaks.html

答案 1 :(得分:4)

将其放在<configuration>元素下:<jvmArgs>-XX:PermSize=256M -XX:MaxPermSize=512M</jvmArgs>

所以Maven插件看起来像这样:

<!-- To launch embded jetty server -->
       <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>${maven-jetty-plugin.version}</version>
            <configuration>
                <jvmArgs>-XX:PermSize=256M -XX:MaxPermSize=512M</jvmArgs>
                <scanIntervalSeconds>10</scanIntervalSeconds>
                <webAppConfig>
                    <contextPath>/${project.name}</contextPath>
                    <extraClasspath>target/classes;../services/target/classes;</extraClasspath>
                </webAppConfig>
                <scanTargets>
                    <scanTarget>target/classes</scanTarget>
                    <scanTarget>../services/target/classes</scanTarget>
                </scanTargets>
            </configuration>
        </plugin>

注意:如果失败并显示一条消息,它无法分配如此多的内存,请使用较低的数字。

答案 2 :(得分:1)

尝试使用-XX增加MaxPermGen空间:MaxPermSize = 512m传递给MAVEN_OPTS。