【问题标题】:Auto restart tomcat when OutOfMemoryError occurs发生 OutOfMemoryError 时自动重启 tomcat
【发布时间】:2014-04-04 17:18:17
【问题描述】:

当 OutOfMemoryError 发生时,我需要在服务器端自动重启 tomcat。最简单的方法是使用 JVM 选项:OnOutOfMemoryError="service tomcat restart"。

问题:Tomcat 是由 tomcat 用户运行的。 tomcat用户无权使用service命令重启tomcat,或者直接运行/etc/init.d/tomcat6(该脚本中的某些命令只能root执行)。

此外,让 tomcat 用户 sudoer 不是一个好主意。有没有更好的方法来做到这一点?

【问题讨论】:

  • 查找内存泄漏将是我的最佳选择。你可以在这里找到一些有用的文章plumbr.eu/blog

标签: java tomcat


【解决方案1】:

解决方案是修复内存泄漏,而不是自动重启来解决它。这并不是一个真正的解决方案,并且仍然会弹出所有用户并强制他们重新登录。

【讨论】:

    【解决方案2】:

    除了修复您的 OOM,使用服务包装器(自动重新)启动您的 JVM 实例,例如 Tanuki Java Service Wrapper

    如果我没记错的话,3.2.3 版属于 LGPL。

    【讨论】:

      【解决方案3】:

      如果这是由内存泄漏引起的,您应该修复它。但是,有时当某种类型的高使用率使用大量内存时会发生这种情况,并且施加硬限制并不容易。如果是这样……

      在您的系统上,如果 Tomcat 崩溃,是否有某些东西(例如 FireDaemon)会自动重新启动它?如果是这样,您可以简单地尝试退出,而不是尝试重新启动

        System.exit(1);
      

      这将结束 Tomcat。但是,有时,当您内存不足时,即使这样也可能不起作用。

      因此,解决此问题的另一种方法是使用一种机制,当您超过一定百分比的内存使用量(例如 85%)时会发出警告。有免费的 Tomcat 监控解决方案可以帮助解决这个问题;或者,您可以尝试自己动手...一些简单的事情。

      【讨论】:

        【解决方案4】:

        如果您无法控制正在使用的应用程序的代码,则另一种方法是在容器内运行它。

        我有一个 tomcat 9 和一个在 docker 容器内运行的 GeoServer 应用程序。有时,请求会使我的应用程序崩溃,并且日志中的错误是 OutOfMemory。 我调整了我的 JVM 参数以使用尽可能多的内存,但有时仍会出现此错误。因此,为了防止此错误使我的服务保持锁定状态,我使用 OnOutOfMemoryError 参数来杀死 tomcat。由于容器只在主进程运行时才被维护,而本例中那个进程就是tomcat,所以当我们杀死它时,容器就停止了。

        Tomcat环境设置JVM参数。

        CATALINA_OPTS="-XX:OnOutOfMemoryError=\"kill -9 %p\"
        -Djava.awt.headless=true \
        -Dfile.encoding=UTF-8 -server \
        -Xms1024m -Xmx3072m -Xss1024k -XX:NewSize=768m \
        -XX:+UseParallelGC -XX:MaxGCPauseMillis=500"
        

        这种方法会强制容器退出,因为 tomcat 被丢弃了。

        您可以通过在启动容器时指定重启策略来自动重启失败的容器。为此,您必须使用 --restart=alwaysthe docker documentation 中定义的其他可能策略。

        docker run -d --name testing_restarts --restart always you_docker_image_with_tomcat:<version>
        

        【讨论】:

          猜你喜欢
          • 2014-12-31
          • 2012-08-26
          • 2014-05-15
          • 2010-10-21
          • 2015-09-19
          • 2011-07-17
          • 2013-10-23
          • 2019-05-17
          • 2019-07-27
          相关资源
          最近更新 更多