Jetty中的PermGen空间问题

5

我正在开发一个Java Web应用程序,使用类似于项目管理的Maven工具。现在我的困扰是,如果我以这种方式设置Jetty每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] Started Jetty Server

[INFO] Starting scanner at interval of 20 seconds.

但在第一次扫描时,我遇到了以下错误:

ERROR ContextLoader - Context initialization failed

java.lang.OutOfMemoryError: PermGen space

我该如何解决它?

更新1

我尝试从Eclipse IDE中增加PermGen空间,方法如下:

enter image description here

但是,在第一次扫描后,我收到了相同的错误。

我该如何解决它?


这意味着当您的Web应用程序重新部署时,您的Web应用程序的类加载器没有被卸载。也许您已经定义了ThreadLocals? - flup
我不知道ThreadLocals的含义,你能解释一下可能出现的问题并提供解决方案的链接吗? - Skizzo
如果你不知道ThreadLocals是什么,那么你可能没有使用它们。 :) 但是类加载器绝对不会被卸载。 - flup
3个回答

6

请将以下内容放在<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>

注意:如果出现无法分配如此多内存的错误消息,请使用较小的数字。


谢谢您的建议,但还没有起作用。我快疯了:( - Skizzo

5

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接