定期重新启动 Web 服务器是最佳行业实践吗?

Geo*_*Geo 29 tomcat java

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

从客户的角度来看,这可以缓解他们白天网站崩溃的问题,但从系统管理员的角度来看,这是一个糟糕的解决方案。

我们在不同的服务器上为不同的客户端托管了 20 个这样的应用程序,确保每晚都重新启动的协调似乎是错误的。

EEA*_*EAA 30

这当然不是最佳实践。虽然这很好的重新启动服务器定期只是为了确保一切正常出现,需要重新启动夜间点到应用程序中的非常严重的内存泄露。


小智 12

“最佳实践”(许多人出于充分理由而做的事情)与“常见实践”(许多人因为懒惰和/或无知而做的事情)之间存在差异。

需要进行常规重新启动或重新启动,继续运行良好的应用程序和(差)的服务器很常见的。但这也清楚地表明您有一个严重的错误。

通过使 SOP 定期重新启动应用程序,您的公司在地毯下隐藏了一个严重的错误。这是不可原谅的,虫子需要被压扁,否则它会回来咬你。

理想情况下,您的公司应该找到更好的开发人员。不幸的是,这可能会导致重写大量代码的工作量相当大。开发人员要么认为写得不好的代码是可以接受的,要么不知道足以识别错误代码的症状,这一事实表明代码质量低下。一个好的开发商在宪法上不能让它留在那个状态。

鉴于您可能无法取代开发人员,有一些建议:

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

即使不涉及面向开发人员的分析工具,也有大量面向系统管理员的工具用于分析和监控 Java 应用程序的内存使用情况。无论如何,您确实应该在生产服务器上设置内存(尤其是堆)监控。即使您正在运行高质量的代码,我也会推荐这个。当您的错误应用程序即将倾倒时,它可能会提前警告您。

但更好的是,这些应该可以帮助您收集存在泄漏的证据,甚至可以指出应用程序中的问题所在。这将为您提供更好的弹药来游说修复它。

  • 实际上,很多时候是基础架构有错误,而不是开发人员的代码。J2EE 应用程序在 JBoss 上定期进入垃圾收集地狱,但在其他商业应用程序服务器上运行良好,我们遇到了无穷无尽的麻烦。因此,这可能不是开发人员的错,而是部署环境的错。 (3认同)

Max*_*mus 6

应用程序开发人员更有可能声称,通过解决他所做的不专业的工作来掩饰他的屁股,这符合他自己的最佳利益。他可能没有真正承认他写了一些内存泄漏严重的东西,但也差不了多少。