Tomcat Web服务器的最佳设置是什么?

时间:2008-11-04 06:11:52

标签: optimization configuration tomcat

我正在维护一个目前大约有800个并发用户的网站。该商业计划表示,这个数字将在一年内增加10倍。

这是我目前的配置:

<Connector port="8080" address="${jboss.bind.address}"
  maxThreads="500" maxHttpHeaderSize="8192"
  emptySessionPath="true" protocol="HTTP/1.1"
  enableLookups="false" redirectPort="8443" acceptCount="100"
  connectionTimeout="20000" disableUploadTimeout="true" />

<Connector port="8443" address="${jboss.bind.address}"
  protocol="HTTP/1.1" SSLEnabled="true"
  maxThreads="500" minSpareThreads="5" maxSpareThreads="25"
    scheme="https" secure="true" clientAuth="false"
    keystoreFile="${jboss.server.home.dir}/conf/ks.p12"
    keystoreType="PKCS12" connectionTimeout="20000"
    keystorePass="pass" sslProtocol="TLS" acceptCount="100" />

平均使用的线程数约为400(对于每个http / https)。但峰值确实使用了500个线程。我想当我获得10倍用户时会遇到麻烦: - )

  • 我该如何调整它?
  • 我应该禁用http keep alive吗?如何配置keep-alive timeout?
  • 哪些值对acceptCount / maxThreads有用?

4 个答案:

答案 0 :(得分:4)

我认为将tomcat放在Apache Http服务器中是一种更强大,更快速的方法。这里是职业选手和职业选手来自http://wiki.apache.org/tomcat/FAQ/Connectors

的缺点

为什么要将Apache与Tomcat集成? (或不)

将Tomcat与Apache集成有很多原因。并且有理由不应该这样做。不用说,每个人都会不同意这里的意见。随着Tomcat 5和6的性能,性能原因变得更难以证明。所以这里有一些问题需要在集成中进行讨论。

  • 聚类。通过使用Apache作为前端,您可以让Apache充当您的内容的前门到多个Tomcat实例。如果你的一只雄猫失败了,那么Apache会忽略它,而你的系统管理员可以彻夜难眠。如果您使用硬件负载均衡器和Tomcat的群集功能,则可以忽略此点。
  • 聚类/安全。您还可以将Apache用作不同Tomcats的前门,用于不同的URL命名空间(/ app1 /,/ app2 /,/ app3 /或虚拟主机)。然后,Tomcats可以在一个受保护的区域中,从安全的角度来看,您只需要担心Apache服务器。从本质上讲,Apache成为智能代理服务器。
  • 安全。无论哪种方式,这个主题都可以左右。 Java拥有安全管理器,而Apache拥有更大的思想共享和更多关于安全性的技巧。我不会更详细地介绍这一点,但让Google成为你的朋友。根据您的情况,一个可能比另一个好。但是请记住,如果你使用Tomcat运行Apache - 你有两个系统要防御,而不是一个。
  • 附加组件。添加CGI,perl,PHP对Apache来说非常自然。它更慢,更多的是Tomcat的kludge。 Apache还有数百个可以随意插入的模块。 Tomcat可以具备此功能,但代码尚未编写。
  • 装饰!使用Apache在Tomcat之前,您可以执行Tomcat不支持或不具备即时代码支持的任意数量的装饰器。例如,可以为Tomcat编写mod_headers,mod_rewrite和mod_alias,但是为什么在Apache完成它的时候重新发明轮子呢?
  • <强>速度。 Apache提供静态内容比Tomcat更快。但除非你有高流量站点,否则这一点毫无用处。但在某些情况下,tomcat可能比apache更快。因此,对您的网站进行基准测试。
  • 插座处理/系统稳定性。与Tomcat相比,Apache在错误条件方面具有更好的套接字处理能力。主要原因是Tomcat必须通过需要跨平台的JVM执行所有套接字处理。问题是套接字优化是一个特定于平台的考验。大多数情况下java代码都没问题,但是当你被连接丢失,无效数据包,来自无效IP的无效请求轰炸时,Apache在丢弃这些错误条件方面比基于JVM的程序做得更好。 (YMMV)

答案 1 :(得分:1)

您可以使用JMeter对此进行调整。我认为很大程度上取决于您的具体硬件设置。 扩展站点的一种可能方法是添加计算机。查看Velocity Conference  和High Scalability website

答案 2 :(得分:1)

我还会考虑调整底层JVM,而不仅仅是tomcat-查看this question以获取一些好的技巧,特别是在垃圾收集和内存分配方面。根据我的经验,JVM调优比调整Tomcat的内部结构更有效。

答案 3 :(得分:1)

嘿,你应该看看

http://tomcat.apache.org/tomcat-7.0-doc/jasper-howto.html#Production Configuration

你可以设置一些与jsp编译相关的配置,它应该使系统更快。