我試圖讓Tomcat,它當前作爲Windows 2003框上的服務運行,在OutOfMemoryError
上轉儲堆。我可以讓Tomcat作爲服務運行來轉儲堆嗎?
(Tomcat正在運行哈德森,這是在我的構建的尾部報告堆空間的問題。運行構建手動不會產生這樣的錯誤。哈德遜球員需要一個堆轉儲上手。)
根據其他地方的指示,我告訴Apache服務監視器配置它用來運行Tomcat的JVM,以便在遇到OutOfMemoryError
時向JVM選項添加以下內容來轉儲堆: -XX:+ HeapDumpOnOutOfMemoryError 然後我運行構建再次。果然,它報告有一個堆錯誤。我掃描整個磁盤尋找默認的java_pid123.hprof
文件(其中顯然123
被JVM的PID取代)。任何地方都不存在.hprof
文件。
我陷入了一個問題22:我需要Hudson人的堆轉儲修復他們的內存泄漏,但是如果我在Tomcat下運行Hudson,我無法獲得堆轉儲。
當Tomcat作爲Windows服務運行時,是否有某種特殊方式在OutOfMemoryError上從它獲取堆轉儲?
我試過的另一件事是在啓動和關閉標籤上告訴它使用「Java」選項而不是「jvm」選項。我相信這應該告訴服務管理器嘗試使用Java可執行命令啓動Tomcat,而不是直接啓動jvm.dll
。當我這樣做時,服務將無法啓動。
當然有人有類似的問題?
我應該提到,我已經使用jconsole附加到了Tomcat,並觀察到堆使用率永遠不會超過60MB。 – 2010-01-31 15:33:41