簡體   English   中英

運行Servlet時出現RuntimeException:Tomcat自行重啟

[英]RuntimeException when running Servlet: Tomcat restarting on its own

我是servlet的新手,並使用Tomcat 7.0.34版(指示我們僅使用此版本)。 我的問題是Tomcat似乎在某個時間點重新啟動,當我一段時間不與servlet交互時會發生這種情況。 我看到以下內容:

在此處輸入圖片說明

此外,當我嘗試通過Eclipse調試時,我在調試窗口中看到以下條目:

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顯示此錯誤“這很可能造成內存泄漏”。 如何解決這個問題? 此處: Web應用程序[ROOT]仍在處理尚未完成的請求。 [Tomcat]但我不知所措。

似乎此問題已在Tomcat的較新版本中按以下方式解決: http : //wiki.apache.org/tomcat/MemoryLeakProtection 不過,我想了解這個問題是什么。

編輯:使用蝕星

您的tomcat配置為“熱部署”,即,如果您更改代碼,則tomcat將合並新代碼而無需重啟服務器。 可以在Tomcat或Eclipse上配置它。 您可以去那里禁用它,因為它實際上是令人頭疼的事情,會花費更多時間,有時甚至無法正常工作。
Tomcat使用單獨的類加載器加載每個Web應用程序。 它監視文件中的更改,如果發生更改,它會通過銷毀類加載器來卸載webapp,並使用新的類加載器再次加載。 發生這種情況時,您將看到您提到的各種日志。
有關Eclipse配置,請參見此處
Tomcat的配置,請參閱這里此外,從Tomcat文檔,閱讀

在server.xml中,設置reloadable =“ false”。

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

如果您希望Catalina監視/ WEB-INF / classes /和/ WEB-INF / lib中的類是否有更改,請設置為true,並在檢測到更改時自動重新加載Web應用程序。 此功能在應用程序開發期間非常有用,但是它需要大量的運行時開銷,因此不建議在已部署的生產應用程序上使用。 這就是為什么此屬性的默認設置為false的原因。 但是,您可以使用Manager Web應用程序來觸發按需重新加載已部署的應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM