tomcat - 在 Tomcat 中杀死守护线程的方法,应用程序无法启动 - 你如何解决这个问题?

标签 tomcat grails

我最近在 Amazon EC2 上部署了一个 Grails 应用程序。我使用了 MySQL 和 Tomcat(除其他外)。

因为这只是出于测试目的,我想体验“糟糕”的情况,所以我在应用程序仍在运行时从网络应用程序中删除了我的应用程序文件夹等等。

当我最终删除我的应用程序的所有痕迹时,我尝试通过在 web-apps 文件夹中放置一个新的 war-file 来部署它的新版本。

由于 8080 已绑定(bind)异常,应用程序无法启动,在阅读了一些博客后,我遇到了对这个问题的解释:守护线程...

现在我使用了:

pkill java

成功了,我的问题是你们是如何处理这种情况的?

最佳答案

如果您试图检测 Tomcat 何时死亡,请确保它真正停止(即不再运行),然后重新启动进程,最好的选择是某种心跳进程。您可以编写一个 shell 脚本,在与 Tomcat 相同的机器上运行,定期向特定 URL 发出 Web 请求。如果它得到预期的值,那么一切都很好,但如果没有,那么它会发出 kill 命令,等待,然后重新启动——或者给你发一封电子邮件,采取其他行动,等等。你想确保这个过程是正确的' 由于上述原因由 Tomcat 启动的守护进程线程(在某些情况下它们会继续运行)。相反,我会将其设置为每分钟作为 cron 作业运行的脚本。

当然,如果您在 AWS EC2 上运行,最好有一个小实例来为您执行此监控。当它检测到 Tomcat 服务器挂掉时,它会杀死整个 EC2 实例并启动一个新实例来替换它。 AWS 具有命令行工具,您可以在脚本中使用这些工具来实现此类管理。这可能是一个更好的解决方案,因为这样您就可以从一个干净的平台开始,所以当您将 EBS 卷或机器镜像与服务器的初始镜像附加在一起时,任何修改(如删除的文件)都将被恢复。上面的方法(在同一台服务器上运行脚本)将无法轻松检测和修复丢失的文件或其他导致问题一开始就失效的更改。

关于tomcat - 在 Tomcat 中杀死守护线程的方法,应用程序无法启动 - 你如何解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7978597/

相关文章:

grails - grails repo 的最新网址是什么? (repo.grails.org/grails/repo 与 repo.grails.org/grails/plugins)

validation - Grails 3 自定义错误对象

java - 我可以在内存不足异常时自动重启tomcat jvm吗

tomcat - 如何访问在应用逻辑云应用程序上运行的 Web 服务器?

grails - 为什么域类中的get-Property仅可与Set和findAll一起使用?

grails - 如何导出新版本的域(数据库架构)的DDL以进行更新

java - AngularJS 抛出错误根路径

tomcat - "request.getRemoteAddr()"的结果在不同的浏览器中是不一样的

java - Tomcat Java Web 应用程序运行缓慢

grails - grails/ivy代理排除?