2012-04-24 38 views
13

我们在Tomcat 5.5中遇到问题,它在我们的生产服务器(Linux CentOS 4.8)上夜间停止,我们不知道为什么它会停止... Catalina中没有Tomcat日志。或任何应用程序的日志。Tomcat停止时没有任何日志或任何堆栈

我们尝试不同的东西,以找到为什么服务器停止:

  • 配置Tomcat来能够产生一个核心转储
  • 仪器System.exit()方法用Javassist找到,如果该方法被称为
  • 加JVM的关机挂钩(使用Runtime.getRuntime().addShutdownHook()

没有一个工作,我们没有核心转储,Exit方法和关机挂钩不叫。 我的结论是:

  • 虚拟机没有正常终止,但崩溃没有任何日志。

任何想法或日志来阅读,找出为什么Tomcat停止?

+0

如果你可以在另一台服务器上复制这个问题,你可以使用jConsole来监视你的JVM – 2012-04-24 15:19:23

+0

我看到Tomcat在Eclipse中运行时停下来。停止并没有显示任何类型的消息或日志,但我认为我缩小了堆栈溢出问题在Hibernate递归提取。 – maksimov 2012-04-24 15:20:50

+0

我们无法复制这个问题,它有时会出现在不做特定任何事情的不同服务器上。 – Remi 2012-04-24 15:24:29

回答

0

很可能是堆栈溢出异常。这是Tomcat发生时的典型行为。例如,您试图序列化为具有循环依赖性的JSON或XML Bean(但不处理周期)。

每当我有这个问题(几次),它一直是这一个。所有其他站点通常会被正确记录(如OutOfMemory等)。

这种类型的站点在任何地方都不留下任何痕迹。

+0

这是一个相当随机的索赔 – 2012-04-24 15:32:45

+0

每次我有这个问题(几次)它一直是这一个。所有其他站点通常会被正确记录(如OutOfMemory等)。 – 2012-04-24 15:42:12

+0

是否有任何方式你知道调试/突出这个不知何故@Eugene Retunsky?你如何验证这一说法? – mass 2014-11-24 22:52:46

0

Tomcat 7在catalina中有一个选项来防止System.exit类调用或类似的东西:http://ci.apache.org/projects/tomcat/tomcat7/docs/security-manager-howto.html

也许5.5版本有类似的选项。尝试文档。

可以将输出重定向到用于启动Tomcat的同一控制台。当您在基于Unix的系统上执行时,这些信息会被重定向到日志,在Windows中,如果没有重定向,它将保留在控制台中。

20

1)确保你知道stderr在哪里重定向,并检查是否有任何打印在那里。

2)检查Tomcat的内存限制和系统有多少空闲内存。查看/ var/log下的Linux系统日志,以查看在此期间是否发生任何可疑事件。例如,如果系统内存不足,内核可以随机杀死一个进程(几乎),而无需追踪。

我们已经在生产中运行了5.5年,从来没有任何不明原因的停机,FWIW。

+11

宾果。/var/log/message有“内存不足:杀死进程31201(java)得分783或牺牲孩子”。 – Kof 2012-11-23 07:08:51

+0

+1。正如KOF建议的那样:'/ var/log/messages'显示java进程已被杀死。 – ankitjaininfo 2013-11-07 10:22:32

+4

如果您无法访问'/ var/log/messages',请使用'dmesg'命令 – 2015-06-16 12:20:10

相关问题