日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

干净的停止tomcat/java应用程序

發布時間:2024/4/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 干净的停止tomcat/java应用程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通常在使用了jdbc或者netty的應用程序中,當shutdown tomcat或java應用程序時,會出現無法停止的情況,報類似如下錯誤:

嚴重:?The?web?application?[]?registered?the?JDBC?driver?[com.mysql.jdbc.Driver]?but?failed?to?unregister?it?when?the?web?application?was?stopped.?To?prevent?a?memory?leak,?the?JDBC?Driver?has?been?forcibly?unregistered.
2014-12-11?17:57:37?org.apache.catalina.loader.WebappClassLoader?clearReferencesThreads
嚴重:?The?web?application?[]?appears?to?have?started?a?thread?named?[FileWatchdog]?but?has?failed?to?stop?it.?This?is?very?likely?to?create?a?memory?leak.
2014-12-11?17:57:37?org.apache.catalina.loader.WebappClassLoader?clearReferencesThreads
嚴重:?The?web?application?[]?appears?to?have?started?a?thread?named?[DefaultQuartzScheduler_Worker-1]?but?has?failed?to?stop?it.?This?is?very?likely?to?create?a?memory?leak.
2014-12-11?17:57:37?org.apache.catalina.loader.WebappClassLoader?clearReferencesThreads
嚴重:?The?web?application?[]?appears?to?have?started?a?thread?named?[DefaultQuartzScheduler_Worker-2]?but?has?failed?to?stop?it.?This?is?very?likely?to?create?a?memory?leak.
2014-12-11?17:57:37?org.apache.catalina.loader.WebappClassLoader?clearReferencesThreads
嚴重:?The?web?application?[]?appears?to?have?started?a?thread?named?[DefaultQuartzScheduler_Worker-3]?but?has?failed?to?stop?it.?This?is?very?likely?to?create?a?memory?leak.
2014-12-11?17:57:37?org.apache.catalina.loader.WebappClassLoader?clearReferencesThreads
嚴重:?The?web?application?[]?appears?to?have?started?a?thread?named?[DefaultQuartzScheduler_Worker-4]?but?has?failed?to?stop?it.?This?is?very?likely?to?create?a?memory?leak.

應該來說,在至少95%的應用中,這個時候采用kill -9殺掉tomcat或java進程的方式并沒有什么問題,因為通常業務進行了檢測,亦或是互聯網應用可以容忍少量的數據不一致性。所以這個時候無需強行介入或者關心,但是如果應用中緩存了相關需要持久化的數據,這個時候就不能直接這么粗暴的停止應用程序了,這會導致數據的不一致性。

在我們公司開發的通信應用框架中,其中支持一種可信的模式,所有請求接收到必須被執行,因此為了最大化性能,我們使用了進程內緩存,同時為了確保盡可能最小化不必要的異常檢測和客戶體驗,我們需要干凈的關閉相關線程池和連接。

在運行于servlet容器的模式下,可通過實現ServletContextListener接口或者繼承spring的ContextLoaderListener類的contextDestroyed方法來釋放相關資源,如下所示:

public void contextDestroyed(ServletContextEvent event) {SpiderShutdownCleaner.shutdown();super.contextDestroyed(event);}

當所有的非daemon線程均停止后,對于活動線程而言,其實就是調用Thread.interupt(正常停止)或者stop(強殺,已經deprecated),jvm就會退出。

轉載于:https://www.cnblogs.com/zhjh256/p/6005572.html

總結

以上是生活随笔為你收集整理的干净的停止tomcat/java应用程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。