在生产环境中运行 Tomcat [已关闭]

我目前正在使用Tomcat6作为开发和生产的Web容器。

我听说 Tomcat 不是生产环境中性能最佳的 Web 容器。这是真的吗?

Tomcat 在性能和内存管理方面是否足以在生产环境中使用?

我们的系统有大约100到400个用户。

对我来说,它更多的是关于Web应用程序是如何编写的以及Web应用程序内部的操作类型。

即使一个 Tomcat 实例的性能存在问题,是否可以对 Tomcat 进行集群?

谢谢。


答案 1

我目前正在使用Tomcat6作为开发和生产的Web容器。

我听说 Tomcat 不是生产环境中性能最佳的 Web 容器。这是真的吗?

好吧,这又取决于你如何看待它。Tomcat可以表现得非常好,它在生产中无处不在,拥有最大的用户群。一些商业应用程序服务器在引擎盖下使用Tomcat,甚至没有告诉你。

当然,您不应该将Tomcat开箱即用的性能与经过良好调整的Web容器进行比较。Tomcat 可以调整为比开箱即用状态更好的性能。例如,您可以谷歌:“雄猫生产”,看看人们如何在实际生产中管理它,并获得很多建议,提示等。

Tomcat 在性能和内存管理方面是否足以在生产环境中使用?

是的,它是。当您需要更多时,有许多供应商提供Tomcat的商业版本,包括监控和检测,以帮助在生产中维护您的应用程序。

我们的系统有大约100到400个用户。

雄猫肯定能处理得比这更多。根据应用程序/系统的性质,您可能需要多个 Tomcat 实例。在实际生产环境中,对Tomcat进行集群是明智的。

对我来说,它更多的是关于Web应用程序是如何编写的以及Web应用程序内部的操作类型。

半真半假。

我相信好的架构和框架也会在你准备集群Tomcat的时候为你节省很多时间。因此,在决定如何布局框架堆栈之前,您需要对 Web 容器应用程序的工作原理、框架在集群环境中如何处理事物以及它们如何进行集群有一定的了解。

例如,问题可能由以下原因引起:

  • 在多个 JVM 实例中的内存缓存
  • 会话存储(内存、数据库、文件存储)及其复制

集群 Tomcat 不是一件容易的事,不恰当地设置框架将使以后难以合并集群 Tomcat。

即使一个 Tomcat 实例的性能存在问题,是否可以对 Tomcat 进行集群?

是的,可以对雄猫进行聚类。设计应用程序的方式决定了应用程序是可以轻松准备好进行群集,还是群集起来会更复杂。此问题可能不是特定于 Tomcat,而是特定于一般的应用程序服务器。

您可能需要考虑的一些问题:

  • 您在 (HTTP) 会话中存储哪些数据
  • 会话的存储位置
  • 保持活动状态会话
  • 使用Web服务器应用程序负载平衡反向代理,例如Apache Web Server + mod_proxy/ mod_jk,nginx,Varnish
  • 使用哪种Tomcat连接器(阻止IO,NIO,APR)

还有其他一些问题,但我认为这些是你可以开始的。


答案 2

100-400 个用户是相对较小的部署。我帮助客户部署了具有更大注册用户群(数百万)或并发用户的Tomcat解决方案。我甚至不认为您的部署需要集群。

要群集Tomcat服务器非常简单。在 Tomcat 服务器前面放置一个负载平衡器。配置具有会话粘性的负载均衡器。你会有一个非常好的雄猫集群。一些客户端希望在一个 Tomcat 实例发生故障并且用户可以自动路由到第二个实例而不会丢失会话数据的情况下进行会话故障转移。我认为这对你的部署来说是过度杀戮。实际上,定期维护造成的停机时间将远远高于系统故障。我有Tomcat服务器运行了几个月,只需要为主要代码版本而关闭。但是如果需要,有开源包支持会话聚类。

说到这一点,大多数 J2EE 应用程序的性能问题都源于应用程序本身,而不是 Tomcat 服务器。以下是我在对客户端系统性能进行故障排除时遇到的最热门的 J2EE 应用程序性能问题。希望这有帮助。


推荐