2009-12-02 53 views
1

我在「開發模式」下運行TC 6,例如。應用程序類正在不斷變化,我想用最少的麻煩看到最新的版本。用Tomcat開發

有段時間我使用TC HTML'manager'應用程序來重新加載;這起到了一定的作用,但一段時間後我一直在收到OOM錯誤。衝浪表明,這種方式重新加載時,TC有泄漏。再加上這是一個麻煩,每次編譯後的額外步驟。

所以我切換到在context.xml文件中設置'reloadable true'。這可以達到一定程度,並且不需要任何額外的步驟,但是我又一次遇到了OOM錯誤(不太頻繁,但仍然每天很多次)。更多的衝浪表明,這裏也可能存在TC泄漏。

如果我使用'reloadable true'運行應用程序,但不重新編譯任何內容或使用'reloadable false',它將永遠運行(並且VisualVM認爲它可以正確記憶)。

所以我有種感覺,每次我重新編譯一個類時我應該完全重啓TC。這是一個巨大的痛苦,但也許比隨機的週期性OOM崩潰更好。只是想知道是否有人有更好的想法。也許我應該嘗試一個不同的容器。

乾杯和謝謝!


非常感謝回覆。 JRebel看起來像一個偉大的計劃,我會嘗試;它似乎是專門爲解決這個問題而設計的,這表明我沒有做到這一點,而且它足夠便宜,如果這是一個騙局,沒有什麼大不了的。

該應用程序通過ConnectorJ執行一些簡單的標準MySQL調用,以及默認的開箱即用內存分配。坦率地說,雖然我沒有看到這些事情是如何相關的,因爲只要沒有重新加載,應用程序就可以正常工作。

再次感謝。再一次,我不敢相信這是多麼有用!

+0

您可以發佈您正在使用的JVM內存設置嗎? – StevenWilkins 2009-12-02 18:10:13

回答

0

Tomcat類重裝曾經是buggy - 而OOM就是這種表現。 Jetty在這方面更可靠。

0

您可能會感興趣這個question。我記得在這裏看到一個問題,建議使用jRockit來解決這個問題,但我不記得在哪裏......當我找到它時,我會搜索並更新這個答案。

其實它是JRebel它承諾解決這個問題。我沒有使用它自己,所以我不能說這是多麼有效的索賠,但我正在考慮它...

0

我們結束了腳本重新部署在Tomcat - 從源代碼控制生成,關閉tomcat,從tomcat中刪除陳舊的文件,部署新的戰爭,重新啓動tomcat,檢查tomcat日誌是否有錯誤。

否則,我們得到了內存問題。

0

你有什麼特別的應用程序 - 例如開始你自己的(非守護進程)線程,或者使用這樣做的庫?至少在這種情況下你會得到泄漏。

我正在開發使用eclipse,由tomcat通過eclipse進行開發管理。每次編譯後,Tomcat會自動重新加載應用程序 - 我還沒有經歷任何內存增長或泄漏,也沒有設置用於針對遠程tomcat devel服務器進行開發 - 從螞蟻腳本部署應用程序。當我開始使用java.util.concurrent.Executors時(它默認情況下)創建非守護進程線程,它確實泄漏了。