2009-10-15 187 views
2

我有一個Tomcat的實例,它由於未知原因而定期崩潰。調試tomcat崩潰

日誌中沒有剩餘錯誤,只有在事件查看器中顯示「Tomcat意外終止」的一行。

在測試環境中,我無法複製該問題。因此,我主要限於被動監控生產環境。

該問題似乎與內存不相關,因爲意外終止與進程的內存使用情況沒有明顯關聯。

我可以採取哪些措施來進一步診斷此問題?

編輯:

一些更正/澄清:

它實際上不是Tomcat的,具有類似配置的,而有些情況下的一個「實例」。

操作系統是Windows 2003

Java版本就是Java 6

UPDATE:

貌似遇到的問題可能畢竟涉及到內存。發現了一些在Tomcat目錄中創建的崩潰轉儲(不包括.../Tomcat/logs)。

轉儲大多含有錯誤,如:

java.lang.OutOfMemoryError:要求32756個字節ChunkPool ::分配。在交換空間之外?

這是出乎意料的,因爲當內存使用量相對較低時(與歷史使用情況相比),進程有時會崩潰。

在所有轉儲中,perm gen空間的使用率爲99%,但絕對而言,此用法不一致,並且遠不及-XX:MaxPermSize中指定的限制。

+0

請讓我們知道原因是什麼,當你找到它。 – 2009-10-17 07:42:21

回答

1

這表明整個JVM崩潰了,這是一件很不尋常的事情。我會考慮以下步驟:

  • 首先檢查硬件是否正常。運行memtest86 + - http://www.memtest86.com/或在Ubuntu光盤上 - 測試內存。讓它運行一段時間是絕對肯定的。
  • 然後看看你使用的Java版本是否正常。某些版本的Java 6打破了一些微妙的功能。最新的Java 5可能是一個很好的解決方案。
  • 禁用Tomcat本機代碼以提高性能。有一個本地庫,其中Tomcat使用東西。由於你有一個崩潰的JVM,擺脫本機代碼是一個非常好的開始。
  • 查看您使用的Windows版本是否存在某些限制。終止前的CPU使用限制或任何其他配額。
+0

感謝您的回覆。 現在我排除了硬件故障,因爲問題發生在許多不同的服務器上。 操作系統是Windows XP,似乎沒有任何CPU使用限制(?) 我會看看我是否可以降級Java版本,並且仍在試圖找出如何禁用Tomcat本機代碼。 – 2009-10-18 04:51:49

+0

你能否提供關於在Java 6中被破解的「細微功能」的更多細節? – 2009-10-18 05:19:51

+0

我不記得確切的細節,但我有一些東西 - 我認爲是Java WebStart - 它已在Java 6的更高版本中得到修復。您可能有類似的東西,因爲Java 6 update 10中存在大量內部重構,還沒有被抓到。因此建議嘗試使用Java 5. 另請注意,您還有其他選擇。 IBM和Oracle都有自己的JVM,可能值得檢查。還有其他的Web容器存在。根據您的需要,Jetty,Glassfish或Geronimo可以替代。 – 2009-10-18 09:00:06

1

通常,如果某個進程在Windows中崩潰,將創建一個轉儲文件。在windbg(windows調試器)中加載轉儲文件,並獲取導致異常的線程的堆棧跟蹤。這應該讓你更好地瞭解問題所在。

+0

在Windows XP上這也是如此嗎?我一直在考慮進行配置更改以獲得這樣的轉儲,但是如果默認情況下創建了一個,那將非常好。 – 2009-10-18 04:57:30

+0

是的,窗戶是一樣的。檢查「啓動和恢復」設置 – steve 2009-10-19 05:12:56