Tomcat自动关闭

时间:2009-06-16 20:17:16

标签: java apache tomcat

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

有人遇到过这个问题吗?

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

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

11 个答案:

答案 0 :(得分:6)

我遇到了这个问题,我在link找到了原因。  我启动tomcat的脚本有最后一行tail -f catalina.out。有时候我没有杀死这个脚本,然后shell超时并使用所有子进程杀死脚本,包括tomcat。

答案 1 :(得分:5)

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

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

有些问题:

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

答案 2 :(得分:2)

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

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

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

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

所以我删除了synchronized关键字并删除了singleton,并为线程安全做了一些代码更改。然后问题就消失了。

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

此致 Phanindra Kasturi

答案 3 :(得分:2)

最近解决了这个问题。

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

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

我如何找到解决方案

如果tomcat不显示任何日志,则系统日志中必须有内容,因此,我检查了/var/log/messages,但是由于拒绝了我的权限,我尝试了/var/log/dmesg并得到了

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

在输出中,我注意到可用内存交换0 K 。运行top命令以确认相同。因此,由于某种原因内存占用率很高,导致操作系统终止了我的tomcat进程。

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

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

因此,请使用kill杀死所有正在运行的tomcat进程。 SWAP内存已释放。

再次启动tomcat,效果很好。 :)

答案 4 :(得分:1)

在调试这样的问题时需要注意的事项:

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

我注意到我的路径中有CATALINA_OPTS,并且设置了较低的JVM大小。因此,发现了tomcat的崩溃和没有日志跟踪。服务器会在不到2小时内自动关闭。

check,CATALINA_OPTS或JAVA_OPTS - 这些可能有jvm设置。或者增加它们或者将它们注释掉并增加交换内存。

答案 8 :(得分:0)

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

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

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

2)输入 Services.msc ,然后点击确定,您将获得计算机中的所有服务。

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

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

这样可行。

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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