Tomcat 自动关闭

Posted

技术标签:

【中文标题】Tomcat 自动关闭【英文标题】:Tomcat shuts down automatically 【发布时间】:2010-11-03 11:24:32 【问题描述】:

我在 Windows 服务器上使用 Apache 和 Tomcat,从今天早上开始,Tomcat 在没有任何日志的情况下停止工作。它没有挂起,它只是关闭了。 Tomcat 中没有日志,CPU/内存很好,我的代码中没有System.Exit

有人遇到过这个问题吗?

它随机发生,在 5-10 分钟后。应用程序正常响应,有时,boom.. 停止工作。

更新:仍然没有线索。管理员团队将在另一个盒子上安装 webapp...

【问题讨论】:

Tomcat stopped without any log or any stack 的可能重复项 尝试调试 bin 文件夹。不能存在 apache tomcat 需要的东西。我复制了另一个工作的 tomcat bin 文件夹,它开始工作了。 @AnujSharma 如何调试 bin 文件夹。 @supersheep 我也有同样的问题。你能解决这个问题吗?? 【参考方案1】:

我启动 tomcat 的脚本最后一行是 tail -f catalina.out

有时我没有杀死这个脚本,然后shell超时并杀死了所有子进程的脚本,包括tomcat。

【讨论】:

谢谢,这也是我的问题! @Rory McCrossan:我有同样的问题,变化很小,tomcat 不是每 5-10 分钟关闭一次,而是随机关闭一次。我不明白你的解决方案。我从 startup.sh 文件启动我的 tomcat。请建议怎么做? @Sumit 我只编辑了答案的格式——你可能想问 vierab @vierb 或@任何其他 tomcat 专家:给定的链接现在已损坏。您能否进一步详细说明您的答案。检查您是否能记住并回忆您在给定链接页面上阅读的内容。 @vierab 在你的情况下,这一行“tail -f catalina.out”在哪里。你能指定那个文件。你是如何解决这个问题的。你能详细说明一下你的答案【参考方案2】:

这听起来像是 JVM 正在崩溃。您是否查找过 JVM 崩溃日志?它通常具有类似 hs_err_pid*.log 的名称,并在 JVM 的工作目录中创建。

如果您找到这样的文件并上传,那么我们可能会提供更多帮助。

一些问题:

您最近是否更改了您使用的 Java 版本? 您使用的 Tomcat 的确切版本是什么? 您使用的是 Tomcat Native(Apache Portable Runtime)吗?

【讨论】:

我曾经将它与 Java 1.4.2 和 FreeBSD 5.7 结合使用(不要问我为什么我们有这个操作系统来运行 Java)——每次出现 NullPointerException 时,JVM 都会得到分段错误。 我用的是6.0.18 Java版本是一样的,因为我们安装了项目我们没有使用Tomcat Native我要找一个hs_err_pid*.log(我没有可以直接访问产品服务器)...它应该在 Windows 机器上的什么位置? 如果是 OpenJDK,崩溃日志可能类似于 /tmp/jvm-*/hs_error.log @Matt Solnit linux 服务器中的 hs_err_pid*.log 文件应该在哪里???【参考方案3】:

最近遇到了这个问题。

场景:Tomcat 启动成功,但 1 小时后自动关闭,有时会在 1 天后发生这种情况,tomcat 日志中没有任何内容。

问题:实际问题是内存使用率高且没有可用的 SWAP 内存。

我是如何找到解决方案的

如果 tomcat 没有显示任何日志,那么系统日志中肯定有一些东西,所以我检查了/var/log/messages,但由于我的权限被拒绝,我尝试了/var/log/dmesg 并得到了这个

“内存不足:杀死进程14606(java)得分106或牺牲孩子”。

在输出中我注意到 Swap Memory free 0 K。 Ran top 命令确认相同。所以,不知何故,内存使用率很高,导致操作系统杀死了我的 tomcat 进程。

花了几个小时终于找到了原因。

ps -ef | grep tomcat 表明有多个 tomcat 进程在为同一个应用程序运行。看来,较早的tomcat关闭可能没有成功,并且由于某种原因即使在关闭后也没有杀死进程,这导致内存使用率很高。

所以,使用kill 杀死所有正在运行的tomcat 进程。 SWAP 内存被释放。

再次启动tomcat,工作正常。 :)

【讨论】:

谢谢,这向我展示了一个关键点。我的两个使用 java 的应用程序在 JVM 上没有足够的内存和 CPU 资源。【参考方案4】:

最近我遇到了这个问题,如果以后有人遇到同样的问题,我希望这会有所帮助。

场景: Tomcat 在没有任何日志或错误的情况下关闭

我的问题的根本原因:使用TimerTask从任务访问的同步方法

我有一个单例类,它有一个基于计时器或用户操作从各种线程访问的同步方法 有时,此方法最多需要几分钟才能完成。当TimerTask 在这个方法上等待一段时间(我猜定时器超时/线程被杀死或者后台发生了什么)并且方法上的锁被释放的那一刻,tomcat 被杀死了。

所以我删除了同步关键字并删除了单例,并为线程安全做了一些代码更改。然后问题就解决了。

我是如何发现的:我在同步方法的第一行有一个日志语句,每次 tomcat 关闭时,我都会在最后几行发现这条消息。

问候, 帕南德拉·卡斯图里

【讨论】:

【参考方案5】:

调试此类问题时要注意的事项:

查看日志目录 ($TOMCAT_ROOT/logs) 以确保所有日志文件都没有任何堆栈跟踪 查看 tomcat 启动脚本,检查日志文件的位置,看看日志是否没有被写入另一个目录。 另一个原因可能是某个其他用户/进程发出了 kill -9,这可能会杀死 tomcat 而不会给它任何记录错误的机会。

【讨论】:

日志处于“调试”状态并且正在记录内容,但不是在 tomcat 停止时。 这强烈表明tomcat下面的某些东西导致了这个失败——它可能是JVM中真的坏的东西,或者一个外部实体只是使用kill杀死了jvm—— 9 点赞信号 不是杀死 linux/unix 命令吗?无论如何,我明白你的意思,但这仍然很奇怪:| kill 是一个 linux/unix 命令。与此等效的 windows 将是从任务管理器中杀死 java 进程【参考方案6】:

另一种可能性是今天早上在绑定到服务器所需端口的盒子上启动了某个进程。

【讨论】:

我认为他确实说过该应用程序在 tomcat 死机之前正常运行了几分钟。如果端口正在使用中,它根本不会出现。 我同意这是一个异常值。那些难以捉摸的日志会很棒,不是吗? 如果有一个“魔术应用程序”在“窃取”端口,我们将无法在它停止后重新启动 tomcat,但我们可以。【参考方案7】:

您的 servlet 或其依赖项之一是否允许调用 System.exit()? (不确定 Tomcat 虚拟机在这个意义上是如何锁定的)

我让开发人员认为可以使用 exit(666);关于检测不可逆矩阵(这不好,但肯定不是致命的)。啊。也许您的系统中有一些类似的罪魁祸首?

【讨论】:

这不太可能,因为它在它发生之前已经工作了几周,现在它每 5 分钟停止一次......很奇怪:|但是我们在另一台服务器上对数据和战争进行了测试,看起来还可以。看起来像是某个地方的配置问题。【参考方案8】:

我注意到我的路径中有 CATALINA_OPTS,它被设置为较小的 JVM 大小。因此,没有找到tomcat的崩溃和日志痕迹。服务器会在不到 2 小时内自动关闭。

检查,CATALINA_OPTS 或 JAVA_OPTS——这些可能有 jvm 设置。要么增加它们,要么将它们注释掉并增加交换内存。

【讨论】:

【参考方案9】:

“本地计算机上的服务启动然后停止,如果没有被其他服务或程序使用,某些服务会自动停止。”

我已经解决了这个问题,我尝试了很多方法来摆脱这个问题,最终我得到了如下解决方案。

1)点击运行命令从开始按钮。

2) 输入Services.msc然后点击OK,你会得到你电脑中的所有服务。

3)选择您的服务并右键单击服务并选择属性

4) 转到登录属性并选择本地系统帐户,然后单击确定。

这会起作用。

【讨论】:

【参考方案10】:

如果其他程序在同一端口上运行,有时会发生这种情况。例如 Skype。在启动 Tomcat 之前关闭该程序。

【讨论】:

【参考方案11】:

尝试清理您的 elipse 项目,因为您可能已尝试添加另一个使用端口 8080 的服务器,然后当您尝试在外部执行默认使用端口 8080 的 Tomcat 服务器时,Tomcat 服务器在清理项目后自动关闭复制新的战争文件并将其粘贴到 bin 中它工作正常 结论:当服务器尝试使用已经获取的端口时,您会看到此类问题。

【讨论】:

以上是关于Tomcat 自动关闭的主要内容,如果未能解决你的问题,请参考以下文章

服务器启动的java服务为啥会自动关闭

记一次TOMCAT一段时间自动关闭

实时监测Tomcat服务的状态,如果关闭,自动开启(已解决)

ecplise中如何关闭Tomcat的自动重启/加载

Tomcat 启动和关闭

Tomcat运行一段时间后,自动停止关闭,To prevent a memory leak,Druid 数据库连接自动关闭, the JDBC Driver has been forcibly unr