我们在运行 Centos 7 的 AWS EC2 实例上运行 Java Spring 服务器应用程序集群。我们在它们上安装了运行状况监视器,偶尔会发出警报,我们会发现 Java 进程已经悄悄消失。我们在任何日志中都找不到任何内容……无论是我们自己的日志还是系统日志。我们在自己的代码周围有一个外部“catch Throwable”,用于记录它捕获的内容,但是我们运行 Tomcat,它有许多自己的线程。我们添加了额外的日志记录来尝试捕捉它消失的时刻,但到目前为止,还没有产生任何信息。
我看过这个问题:如何在 Linux 中找出 Java 进程死亡的原因。我看不出那里有什么帮助。
目前我们无法将这些进程的启动器包含在解决方案中。说来话长。相信我,我们已经尝试过沿着这条路走下去。
有什么建议么?我想知道是否应该将 Java 进程包装在外部父进程中,该父进程仔细监视并记录来自 Java 子进程的所有信号。我想知道是否有我还没有找到的现成解决方案。任何想法将不胜感激。
答案1
我用过监控监视服务。它基本上作为系统上自己的服务运行,并且能够监视某个命名进程的存在。您可以让它重新启动服务,或者只是在服务消失时生成警报。它还具有检测重新启动失败(以及尝试次数)的逻辑。您还可以让它执行一些操作,例如打开 http 连接来检查服务是否已启动。
我相信这monit
是 CentOS7 的 EPEL7 中的内容。