2009-10-10 80 views
2

我有一個Tomcat作爲Windows服務安裝,有時在我嘗試關閉它時(通過services.msc)它會掛起。我嘗試用調試器附加到它,但我似乎無法理解爲什麼它掛起。調試關閉Apache Tomcat的問題

當我嘗試做看一個線程「Thread.getThreads()[0]」,我得到一個錯誤的調試器:「堆棧幀不可用」。

如果不是關停整個Tomcat的,我只是卸載所有我的servlet環境中,一切都完美的作品。

您將如何進行調試?這是否是Tomcat中的一個錯誤?

回答

1

我不認爲這是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

+0

我會嘗試「淨停」把它取下來。 即使問題出在我的一個Web應用程序中,我該如何調試它?這個問題不是確定性的,所以隔離特定的應用程序可能會很困難。 – ripper234 2009-10-11 07:04:08

+0

「net stop」正在服務屏幕上工作。您是否嘗試了%CATALINA_HOME%\ bin \ shutdown.bat? – 2009-10-11 07:33:47

+0

看起來像shutdown.bat是不相關的。這不是我的個人開發機器,我想在這裏瞭解問題的根源。 Tomcat應該通過「net stop」正確停止。 – ripper234 2009-10-11 09:18:26

0

一件事您可以嘗試使用分析器來查看關閉後存儲在內存中的對象。

我遇到類似的問題,在我的代碼庫有一個「邏輯內存泄漏。」由於Java垃圾收集確實可以防止大部分內存泄漏,因此需要謹慎選擇字句。邏輯內存泄漏是由程序員創建的,程序員不那麼小心,或者處於太緊張的時間。

無論如何,我們使用JProfile來查看虛擬機中還有哪些對象仍然存在,並且我們發現某些線程在關閉期間沒有正確處理。如果你能夠找出哪些對象還活着,你會有一個暗示爲什麼tomcat沒有完全關閉。

1

爲了完整起見,我必須問:您是否檢查過Tomcat自己的日誌文件?

%TomcatHome%\logs 

這可能是類似...

C:\Program Files\Apache Software Foundation\Tomcat 6.0\logs 

請原諒我,如果這是你嘗試的第一件事情,但你沒有提到它,所以我想我會問以防萬一。

+0

嗯.. 嗯.... 我必須承認我沒有。我將在下一次調試問題時嘗試此操作。 – ripper234 2009-10-13 22:47:26