2012-04-24 72 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

相關問題