我有一個Tomcat作爲Windows服務安裝,有時在我嘗試關閉它時(通過services.msc)它會掛起。我嘗試用調試器附加到它,但我似乎無法理解爲什麼它掛起。調試關閉Apache Tomcat的問題
當我嘗試做看一個線程「Thread.getThreads()[0]」,我得到一個錯誤的調試器:「堆棧幀不可用」。
如果不是關停整個Tomcat的,我只是卸載所有我的servlet環境中,一切都完美的作品。
您將如何進行調試?這是否是Tomcat中的一個錯誤?
我有一個Tomcat作爲Windows服務安裝,有時在我嘗試關閉它時(通過services.msc)它會掛起。我嘗試用調試器附加到它,但我似乎無法理解爲什麼它掛起。調試關閉Apache Tomcat的問題
當我嘗試做看一個線程「Thread.getThreads()[0]」,我得到一個錯誤的調試器:「堆棧幀不可用」。
如果不是關停整個Tomcat的,我只是卸載所有我的servlet環境中,一切都完美的作品。
您將如何進行調試?這是否是Tomcat中的一個錯誤?
我不認爲這是tomcat中的錯誤,因爲我的tomcats關閉了。
如果說,當你卸載所有的網絡應用程序一切正常,也許問題是與Web應用程序之一。嘗試一次卸載一個。關閉tomcat,看看會發生什麼。如果它是導致問題的Web應用程序,則一旦卸載它就不會有問題。
一個問題 - 當你在命令行做它發生什麼(而不是從服務屏幕)?
編輯
爲了進行遠程調試,你需要將以下添加到JAVA_OPTS
JAVA_OPTS=%JAVA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
然後你就可以將像Eclipse的IDE的過程(尋找遠程調試)。您可以從here下載源代碼。你在找什麼(我猜)是實施Lifecycle.stop()或LifecycleListener的實施方法。對不起,我不能更具體。
編輯2
一兩件事 - 如果它是你的開發機器,我發現最好運行Eclipse不是作爲一個服務,但在命令行或直接從IDE
一件事您可以嘗試使用分析器來查看關閉後存儲在內存中的對象。
我遇到類似的問題,在我的代碼庫有一個「邏輯內存泄漏。」由於Java垃圾收集確實可以防止大部分內存泄漏,因此需要謹慎選擇字句。邏輯內存泄漏是由程序員創建的,程序員不那麼小心,或者處於太緊張的時間。
無論如何,我們使用JProfile來查看虛擬機中還有哪些對象仍然存在,並且我們發現某些線程在關閉期間沒有正確處理。如果你能夠找出哪些對象還活着,你會有一個暗示爲什麼tomcat沒有完全關閉。
爲了完整起見,我必須問:您是否檢查過Tomcat自己的日誌文件?
%TomcatHome%\logs
這可能是類似...
C:\Program Files\Apache Software Foundation\Tomcat 6.0\logs
請原諒我,如果這是你嘗試的第一件事情,但你沒有提到它,所以我想我會問以防萬一。
嗯.. 嗯.... 我必須承認我沒有。我將在下一次調試問題時嘗試此操作。 – ripper234 2009-10-13 22:47:26
我會嘗試「淨停」把它取下來。 即使問題出在我的一個Web應用程序中,我該如何調試它?這個問題不是確定性的,所以隔離特定的應用程序可能會很困難。 – ripper234 2009-10-11 07:04:08
「net stop」正在服務屏幕上工作。您是否嘗試了%CATALINA_HOME%\ bin \ shutdown.bat? – 2009-10-11 07:33:47
看起來像shutdown.bat是不相關的。這不是我的個人開發機器,我想在這裏瞭解問題的根源。 Tomcat應該通過「net stop」正確停止。 – ripper234 2009-10-11 09:18:26