在两个Web应用程序之间共享实例时Maven Jetty插件OutOfMemoryError
我正在使用maven jetty插件来运行我的两个Web应用程序。 一个Web应用程序是spring mvc UI,另一个是RESTful Web应用程序。 当我运行两个单独的mvn jetty时,我能够让两个Web应用程序进行通信:运行实例并分配不同的端口。 我已使用下面的maven pom.xml配置使用相同的端口在同一个jetty实例中成功部署。 我最终得到一个ava.lang.OutOfMemoryError:PermGen空间错误。 对此最好的解决方法是什么?
org.mortbay.jetty jetty-maven-plugin 7.6.8.v20121106 -Xmx2024m -Xms2024m 10 / ../../api/target/main-api.war /test
添加以下jvm参数,如果收到有关无法分配内存的错误,请尝试使用较小的值(128和256)
-XX:PermSize=256M -XX:MaxPermSize=512M
参考
- 什么是Java中的’PermSize’?
- -XX:带或不带-XX的MaxPermSize:PermSize
尝试以分叉模式运行Jetty,如下所示:
org.mortbay.jetty jetty-maven-plugin 7.6.8.v20121106 start-jetty pre-integration-test run-forked -Xmx2048m -Xms1536m -XX:PermSize=128m -XX:MaxPermSize=256m 10 / ../../api/target/main-api.war /test
有关更多详细信息,请检查在分叉JVM中运行Jetty 。
并且……在开始之前确保你真的有2048 MB的可用内存。
尝试使用Plumbr来诊断Web应用程序的任何内存泄漏问题。 http://plumbr.eu/
我最终得到一个java.lang.OutOfMemoryError:PermGen空间错误
最后多久? 是否因为更改而经常重新部署的webapp之一?
重新部署Web应用程序时,很容易泄漏类。 我将maven添加到MAVEN_OPTS这个设置
-XX:+ HeapDumpOnOutOfMemoryError
运行直到出现内存不足错误,然后使用eclipse mat加载转储,看看是什么填满了你的perm gen。 很可能您的网络应用程序在重新部署时泄漏了类 。
这取决于哪个JVM实例需要更多内存。 例如,如果测试是分叉的(默认情况下),并且由于OutOfMemoryError而失败,那么尝试启动它们的configure插件:
maven-surefire-plugin -Xmx1024m
要么
除了堆内存。 您还必须增加perm大小以解决maven中的exception,在环境变量中使用这些变量。 有时也可以扩展烫发内存大小 –
设置环境变量:
变量名:MAVEN_OPTS变量值:-Xmx512m -XX:MaxPermSize = 256m
来自资源的编译数据
请说明:您使用的是什么jvm版本,您使用的操作系统,计算机上安装了多少物理内存。 如果你将你的内存需求减少到例如1400M会发生什么(如果你在32位jvm上运行它会有所帮助),即:
-Xmx1400m -Xms1400m