2016-10-03 71 views
0

我是servlets和使用Tomcat 7.0.34版本的新手(我們被指示僅使用此版本)。我的問題是,Tomcat似乎在某個時間點重新啓動,這發生在我一段時間不與servlet交互時。我看到以下內容:運行Servlet時的RuntimeException:Tomcat自己重新啓動

enter image description here

此外,當我通過月食試圖調試我看到在調試窗口中輸入以下內容:

Daemon Thread [http-bio-80-exec-1] (Suspended (exception RuntimeException)) 
ThreadPoolExecutor(ThreadPoolExecutor).runWorker(ThreadPoolExecutor$Worker) line: not available 
ThreadPoolExecutor$Worker.run() line: not available 
TaskThread(Thread).run() line: not available  

而這個控制檯:

SEVERE: The web application [/csj] is still processing a request that has yet to finish. This is very likely to create a memory leak. You can control the time allowed for requests to finish by using the unloadDelay attribute of the standard Context implementation. 
Okt 03, 2016 1:39:39 AM org.apache.catalina.core.StandardContext reload 
INFO: Reloading Context with name [/csj] is completed 

我想知道爲什麼Tomcat是重新啓動。如果我不停地點擊按鈕,那麼就不會看到這個問題。

我試着在這裏看:Tomcat showing this error "This is very likely to create a memory leak". How to resolve this issue?和在這裏:The web application [ROOT] is still processing a request that has yet to finish. [Tomcat]但我很難理解。

看來這個問題已經解決了在更新版本的Tomcat根據這個:http://wiki.apache.org/tomcat/MemoryLeakProtection。不過,我想了解這個問題是什麼。

編輯:使用Eclipse-MARS

回答

0

Tomcat的配置爲「熱部署」,即如果更改代碼,tomcat會加入新的代碼,而無需重新啓動服務器。這可以在tomcat或eclipse中配置。你可以去那裏禁用它,因爲它實際上是一個頭痛的問題,需要更多的時間,有時無法正常工作。
Tomcat使用單獨的類加載器加載每個webapp。它監視你的文件的變化,如果發生變化,它會通過銷燬類加載器來卸載你的web應用程序,並使用新的類加載器再次加載。發生這種情況時,您會看到您提到的各種日誌。
對於蝕結構,見here
Tomcat的配置,參見here 另外,從Tomcat文檔,讀取this

+0

不幸的是,這並沒有解決問題...我在控制檯中看到以下內容:Okt 03,2016 8:17:13 PM org.apache.catalina.core.StandardContext reload INFO:Reloading Context with name [/BestDeal]已開始 2016年3月3日8:17:14 org.apache.catalina.core.StandardContext重新加載 信息:名稱[/ BestDeal]的重新加載上下文已完成 – hrushi

+0

在\ tomcat \ conf \ server.xml中,在

+0

一個問題:在Servlet中使用getClass()是否會造成潛在的內存泄漏? – hrushi

0

在server.xml中,設置重新加載= 「假」。

https://tomcat.apache.org/tomcat-5.5-doc/config/context.html

設置爲true,如果你想卡塔利娜監視/ WEB-INF /班/和/ WEB-INF/lib目錄更改類,並自動重新加載web應用程序,如果檢測到變化。此功能在應用程序開發過程中非常有用,但它需要大量的運行時間開銷,不建議用於已部署的生產應用程序。這就是爲什麼該屬性的默認設置爲false。但是,您可以使用Manager Web應用程序按需觸發重新部署的應用程序。

+0

有一個問題:在servlet中使用getClass()會導致潛在的內存泄漏嗎? – hrushi

相關問題