定期重新启动Web服务器是否是行业惯例?

我们有一个在Tomcat上运行的Web应用程序(由第三方开发)。 我们从应用程序中获得的性能非常差。 应用程序开发人员声称,这是一个行业最佳实践,每晚重新启动Web服务器,释放所有内存使用并重新开始。

从客户的angular度来看,他们减轻了白天网站崩溃的问题,但从SysAdmin的angular度来看,这是一个可怕的解决scheme。

我们将这些应用程序中的20个应用程序放在不同的服务器上供不同的客户端使用,并且确保每天晚上都重新启动的协调似乎是错误的。

这当然不是最好的做法。 虽然可以定期重新启动服务器,但为了确保所有内容都正常运行,需要每晚重启都会导致应用程序中出现严重的内存泄漏。

“最佳实践”,很多人出于正当理由而做的事情,以及“常见实践”,这是很多人因为懒惰和/或无知而做的事情。

应用程序和(更糟糕的)需要定期重新启动或重新启动以保持良好运行的服务器相当常见。 但是这也清楚地表明你有一个重要的bug。

通过定期重新启动应用程序,贵公司正在隐藏地毯下的严重错误。 这是不可原谅的,这个错误需要面对并压扁,否则它会在以后回来咬你。

理想情况下,你的公司应该找一个更好的开发者。 不幸的是,这可能会导致很多工作来重写大量的代码。 开发人员认为编写不好的代码是可以接受的,或者不能很好地识别出错代码的症状,这表明代码的质量很低。 一个好的开发者在宪法上是不能把它留在这个状态的。

鉴于您可能无法取代开发人员,有几点build议:

  • 看看你是否可以让一个更好的开发人员检查代码,并将他们的评估报告给可以做一些事情的人,
  • 看看分析工具。 如果您有技能和/或倾向,请尝试自己分析代码以查找泄漏并进行报告。

即使没有涉及面向开发人员的分析工具,也有许多面向系统pipe理员的工具可用于分析和监视Java应用程序上的内存使用情况。 在任何情况下,您都应该在生产服务器上真正设置对内存(特别是堆)的监视。 即使您正在运行质量代码,我也build议您这样做。 它可能会给你提前警告,当你的马车应用程序即将推翻。

但更好的是,这些应该可以帮助你收集证据certificate泄漏,甚至可以指出应用程序中的问题。 这会给你更好的弹药来游说它被修理。

应用程序开发人员更可能声称,他为自己的最佳利益来掩护他的屁股,通过解决他所做的不专业的工作。 他可能并没有真正承认自己写了一个内存泄露严重的东西,但还没有达到这个程度。

这里的许多答案似乎都脱离了实际解决scheme的标志。 他们似乎避免了教条 – 服务器不应该重新启动 – 为什么我们有5个9呢? 容错? 那么,当他们应该起来,他们熬夜。

另外,要说明不良开发商的原因或不好的开发实践并不是问题的根源。 它可能是更经常的不是不坏的应用程序代码。 这些问题已经被embedded到许多系统代码中。 小内存泄漏,Java堆和permgen问题,如果你正在运行大量的小应用程序。 现代服务器和他们运行的软件非常复杂。 当你想到像tomcat这样的服务器 – 服务文件,处理Web请求,networking通信,数据库通信等,它做了很多事情。 在那堆栈里有很多移动部件。

主动地重新启动服务器可以说一周或一个月在我看来是智能和高效的。 如果你是群集的,你旋转服务器,你不应该影响客户端一点。 客户将会更加高兴你的服务器的性能。

IMO服务器应该尽可能的closures。 应用程序开发人员更可能构build了一个内存泄漏的低劣应用程序。

我有一个脚本每天晚上重新启动我们的networking服务器之一,但更多的是因为一个糟糕的Java应用程序,而不是一个行业标准。 我会说,虽然重新启动Web服务并不罕见。 这可能会做你正在寻找的内存清理,并减less服务器相比,完全重新启动。

服务器最好不要重启。 这是我们有容错的原因之一。 如果您的应用程序需要重新启动服务器,那么您的应用程序正在泄漏内存,并且构build得非常糟糕。

我之前一直在使用Tomcat,而且我遇到了同样的问题,下次我将使用Java容器,我将寻找另一个,也许是JBoss或GlassFish。

编辑:如果您现在每晚都必须重新启动,那么在负载增加的情况下,您可能不得不经常重新启动它。 一定要有可靠的应用程序,这是最好的解决scheme。

我见过的最频繁的是每周一次。 我现在在哪里,我们是一家橱窗商店,我们在周二的补丁周末每月都会这样做。

虽然我同意,不断重启服务器并不理想,但在某些情况下,既不是开发者的错,也不是错误的事情。 由于Python Popen库中的问题,我们有一个运行良好的应用程序正在泄漏内存。 这是一个旧的应用程序,即将退休,但它是关键业务。 我们必须保持运行,为我们的客户最小的困扰。 所以我们决定每天晚上重新启动服务器。