我正在开发一个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空间:
但在第一次扫描后我又收到了同样的错误。
我该如何解决?
答案 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。