java.lang.OutOfMemoryError:Tomcat7上的java堆空间部署.war

java.lang.OutOfMemoryError:Tomcat7上的java堆空间部署.war,java,tomcat,heap,jruby,war,Java,Tomcat,Heap,Jruby,War,在tomcat7(Ubuntu)中运行war文件时出现以下错误: 当我将app.war文件放在webapps路径中时,出现上述异常。在我的情况下,如果我部署我的应用程序而不重新启动tomcat,就会发生这种情况。我认为GC(垃圾收集器)在释放分配的内存方面存在一些问题 我的解决办法是: 只需删除war文件 等待一段时间,直到您的应用程序文件夹被tomcat删除 停止服务器 上传war文件 最后再次启动tomcat实例 这在Java世界很常见,实际上仍然可能影响JRuby。。。尽管现在如果您使用

在tomcat7(Ubuntu)中运行war文件时出现以下错误:


当我将app.war文件放在webapps路径中时,出现上述异常。

在我的情况下,如果我部署我的应用程序而不重新启动tomcat,就会发生这种情况。我认为GC(垃圾收集器)在释放分配的内存方面存在一些问题

我的解决办法是:

  • 只需删除war文件
  • 等待一段时间,直到您的应用程序文件夹被tomcat删除
  • 停止服务器
  • 上传war文件
  • 最后再次启动tomcat实例

    • 这在Java世界很常见,实际上仍然可能影响JRuby。。。尽管现在如果您使用的是最新版本>=1.7.15,并且使用的是jruby openssl>=0.9.5,那么热部署会更加顺利。但是仍然可能有gems/库会在重新加载时产生问题,从而导致内存泄漏(其中一个库是
      要求“超时”
      ),因此您需要查看堆转储以查找泄漏候选。此外,Tomcat通常在卸载/重新部署期间打印与“潜在”泄漏候选相关的有用提示


      现在,有一些事情需要确保。如果您使用的是Java 6,您需要使用并发(标记和扫描)GC,因为其他人不交换堆空间,而且这不是默认值,即使如此,如果您计划热重新加载,您也需要增加堆大小,因为它需要能够容纳两倍于您的应用程序(Java)类。

      必须增加堆大小。您可以创建或编辑$CATALINA_HOME/bin/setenv.sh,添加以下行:

      JAVA_OPTS="-Xms1024m -Xmx2048m"
      

      然后重新启动tomcat。我认为最好将war文件解包并复制到$CATALINA_HOME/webapps,此外,在生产中使用热部署不是一个好主意。

      war文件的大小是多少?或者更确切地说,堆的大小是多少?似乎您为jvm分配的内存太少。。
      JAVA_OPTS="-Xms1024m -Xmx2048m"