我正在使用maven jetty插件来运行我的两个Web应用程序。一个Web应用程序是spring mvc UI,另一个是RESTful Web应用程序。当我运行两个单独的mvn jetty时,我能够让两个Web应用程序进行通信:运行实例并分配不同的端口。我已使用下面的maven pom.xml配置使用相同的端口在同一个jetty实例中成功部署。我最终得到一个ava.lang.OutOfMemoryError:PermGen空间错误。对此最好的解决方法是什么?
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>7.6.8.v20121106</version>
<configuration>
<jvmArgs>-Xmx2024m -Xms2024m</jvmArgs>
<scanIntervalSeconds>10</scanIntervalSeconds>
<webApp>
<contextPath>/</contextPath>
</webApp>
<contextHandlers>
<contextHandler implementation="org.eclipse.jetty.webapp.WebAppContext">
<war>../../api/target/main-api.war</war>
<contextPath>/test</contextPath>
</contextHandler>
</contextHandlers>
</configuration>
</plugin>
答案 0 :(得分:10)
添加以下jvm参数,如果收到有关无法分配内存的错误,请尝试使用较小的值(128和256)
-XX:PermSize=256M -XX:MaxPermSize=512M
参考
答案 1 :(得分:2)
尝试以分叉模式运行Jetty,如下所示:
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>7.6.8.v20121106</version>
<executions>
<execution>
<id>start-jetty</id>
<!-- Set this to the appropriate phase:
pre-integration-test, or earlier test-compile-->
<phase>pre-integration-test</phase>
<goals>
<goal>run-forked</goal>
</goals>
</execution>
</executions>
<configuration>
<jvmArgs>-Xmx2048m -Xms1536m -XX:PermSize=128m -XX:MaxPermSize=256m</jvmArgs>
<scanIntervalSeconds>10</scanIntervalSeconds>
<webApp>
<contextPath>/</contextPath>
</webApp>
<contextHandlers>
<contextHandler implementation="org.eclipse.jetty.webapp.WebAppContext">
<war>../../api/target/main-api.war</war>
<contextPath>/test</contextPath>
</contextHandler>
</contextHandlers>
</configuration>
</plugin>
有关详细信息,请查看Running Jetty in a forked JVM。
并确保在开始之前确实有2048 MB的可用内存。
答案 2 :(得分:1)
尝试使用Plumbr诊断您的网络应用程序的任何内存泄漏问题。 http://plumbr.eu/
答案 3 :(得分:0)
我最终得到一个java.lang.OutOfMemoryError:PermGen空格错误
最终会持续多久?是否因为更改而频繁重新部署的webapp之一?
重新部署Web应用程序时,很容易泄漏类。我将maven添加到MAVEN_OPTS
这个设置-XX:+ HeapDumpOnOutOfMemoryError
运行直到出现内存不足错误,然后使用eclipse mat加载转储并查看填充perm gen的内容。您的网络应用最有可能是leaking classes on redeploy。
答案 4 :(得分:0)
这取决于哪个JVM实例需要更多内存。例如,如果测试是分叉的(默认情况下),并且由于OutOfMemoryError而失败,那么请尝试启动它们的configure插件:
<plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> <argLine>-Xmx1024m</argLine> </configuration> </plugin>
OR
除堆内存外。您还必须增加perm大小以解决maven中的异常在环境变量中使用这些变量。并且有时也可以扩展perm内存大小 -
设置环境变量:
变量名:MAVEN_OPTS变量值:-Xmx512m -XX:MaxPermSize = 256m
来自resource
的已编译数据答案 5 :(得分:0)
请说明:您使用的是什么jvm版本,您使用的操作系统,计算机上安装了多少物理内存。如果你将你的内存需求减少到1400M会发生什么情况(如果你在32位jvm上运行会有所帮助),即:
<jvmArgs>-Xmx1400m -Xms1400m</jvmArgs>