[英]Pitfals of deploying/redploying app to Tomcat without restarting
我已經讀過,Tomcat 5.5+可以在不重啟的情況下將戰爭部署到Tomcat服務器。 聽起來不錯,但我想我對此功能及其可靠性持懷疑態度。 我以前的經驗(使用Websphere)是重啟服務器以避免內存問題等的最佳實踐。因此,我想獲得有關Tomcat可能存在的陷阱的反饋。
(要明確我的經驗,我為一家大型公司開發了Java Web應用程序5年,該公司將應用程序開發人員從應用程序服務器工程師中分離出來-我們使用了Websphere-因此,我在運行/配置任何應用程序方面沒有太多經驗我自己的應用服務器)
通常,存在多種類型的泄漏,它們適用於重新部署方案。 對於生產系統,如果可能的話,最好是執行重新啟動,因為當今的應用程序中使用了許多不同的組件和庫,因此很難找到所有組件和庫,甚至很難修復它們。 Esp。 如果您無法訪問所有源代碼。
ClassLoader泄漏是導致重新部署的原因 。
它們可能是由萬物造成的。 真的,我的意思是:
.war
文件中。 靜態注冊表泄漏 特定於Tomcat,我的經驗如下:
org.apache.catalina.core.JreMemoryLeakPreventionListener
,最近提交給Tomcat6.x。 我寫了一篇博客文章,介紹了我在進行重新部署壓力測試時遇到的泄漏的經驗 -試圖“修復”企業級Java Web應用程序的所有可能的泄漏。
熱部署非常好,因為它通常比啟動和關閉服務器快得多。
mhaller寫了很多關於避免泄漏的文章。 另一個問題是活動用戶的會話必須在應用程序“重新啟動”后仍然有效。 有幾件事情必須要照顧,但總的來說,這意味着它們的會話必須是可序列化的,然后才能正確地反序列化。 如果您有狀態的數據庫連接等,這可能會有些棘手,但是如果您的代碼對於數據庫的連接是健壯的,那應該還不錯。
還要注意,某些IDE允許在保存修改后的源文件時更新WAR中的代碼(與應用程序相同),而不必重新部署。 MyEclipse很好地做到了這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.