在两个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