我已经读过Tomcat 5.5+可以在没有重启的情况下将战争部署到Tomcat服务器。这听起来很棒,但我想我对这个功能太过持怀疑态度,而且它的可靠性。我以前的经验(使用Websphere)是重启服务器以避免内存问题等最佳实践。所以我想得到关于Tomcat可能存在哪些陷阱的反馈。
(为了清楚我的经验,我为一家大型公司开发了java网络应用程序5年,该公司将应用程序开发人员与应用程序服务器工程师分开 - 我们使用了Websphere - 所以我没有很多运行经验/自己配置任何应用服务器)
答案 0 :(得分:6)
通常,存在多种类型的泄漏,它们适用于重新部署方案。对于生产系统,如果可能的话,执行重启确实是最好的,因为在今天的应用程序中使用了很多不同的组件和库,很难找到它们,甚至更难修复它们。 ESP。如果您无法访问所有源代码。
ClassLoader泄漏是重新部署时的漏洞。
它们可能是由一切引起的。真的,我的意思是一切:
.war
文件中。静态注册表导致泄漏特定于Tomcat,我的经验如下:
org.apache.catalina.core.JreMemoryLeakPreventionListener
,最近已提交给Tomcat 6.x 我撰写了一篇关于my experience with leaks when doing redeployment stresstesting的博文,试图“修复”企业级Java Web应用程序的所有可能漏洞。
答案 1 :(得分:1)
热部署非常好,因为它通常比上下移动服务器快得多。
mhaller写了很多关于避免泄漏的文章。另一个问题是活跃用户让他们的会话在应用程序“重启”后仍然存在。有几件事情必须要注意,但总的来说,它们的会话必须是可序列化的,然后才能正确地反序列化。如果你有状态数据库连接等,这可能有点棘手,但如果你的代码对数据库hickup很强大,那不应该太糟糕。另请注意,某些IDE允许在保存修改后的源文件时更新WAR内部的代码(与应用程序相同),而不必重新部署。 MyEclipse相当不错。