在生产环境中运行Tomcat

时间:2010-11-15 08:48:01

标签: java performance tomcat cluster-computing

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

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

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

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

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

即使性能在一个Tomcat实例上出现问题,是否可以集群Tomcat?

感谢。

4 个答案:

答案 0 :(得分:14)

  

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

     

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

那么,这又取决于你怎么看。 Tomcat可以很好地运行,并且在生产中随处可用,拥有最大的用户群。一些商业应用程序服务器甚至没有告诉你使用Tomcat。

当然,您不应将Tomcat开箱即用的性能与经过良好调整的Web容器进行比较。可以调整Tomcat以获得比其开箱即用状态更好的性能。你可以谷歌:“tomcat production”,例如,看看人们如何在实际制作中管理它,并获得大量的建议,提示等。

  

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

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

  

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

Tomcat可以肯定地处理更多。取决于您的应用程序/系统的性质,您可能需要多个Tomcat实例。在真实的生产环境中,集中Tomcat是明智的。

  

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

半真半假。

我相信,当您要集群Tomcat时,良好的架构和框架也将为您节省大量时间。因此,在决定如何放置框架堆栈之前,您需要掌握Web容器应用程序如何工作,框架如何处理集群环境中的事物以及它们如何集群的一般知识。

例如问题可能来自:

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

集群Tomcat不是一项简单的任务,如果不正确地放置您的框架,将很难在以后合并集群Tomcat。

  

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

是的,可以集群Tomcat。您设计应用程序的方式决定了您的应用程序是否可以轻松地进行群集,或者群集更复杂。此问题可能不是特定于Tomcat,而是特定于应用程序服务器。

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

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

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

答案 1 :(得分:6)

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

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

说到这一点,大多数J2EE应用程序性能问题都源于应用程序本身而不是Tomcat服务器。以下是我在遇到客户端系统性能时遇到的问题最多的Top J2EE Application Performance Problems。希望这有帮助。

答案 2 :(得分:3)

你是对的,首先考虑功能,然后考虑性能。甚至一个Tomcat实例也能够为这么多用户提供足够的服务。是的,clustering Tomcat是可能的。

答案 3 :(得分:1)

Tomcat只是一个Web服务器。如果您希望对Web应用程序进行集群化,则应该查看系统设置并将HTTP调用发送到具有相同代码的其他服务器,以卸载主服务器。

这可以通过拥有一个不依赖于您的Web服务器或您的应用程序的集群动态环境来实现。

至于Tomcat的表现,我不担心,担心你的代码就像90%的瓶颈所在。