【问题标题】:What are the optimal settings for Tomcat web server?Tomcat Web 服务器的最佳设置是什么?
【发布时间】:2008-11-04 06:11:52
【问题描述】:

我正在维护一个目前有大约 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保持活动吗?如何配置保持活动超时?
  • acceptCount / maxThreads 的最佳值是什么?

【问题讨论】:

  • 您没有提供足够的信息,因为您拒绝了非常好的答案,例如“出于政策原因”。你的CPU饱和了吗?网络?否则只需设置 maxThreads=15000"。加速您的应用程序以更早地释放线程。并且(如果您这样做了)无需投票反对您不喜欢的答案...

标签: optimization configuration tomcat


【解决方案1】:

我认为将 tomcat 放在 Apache Http 服务器中是更健壮和更快的方法。以下是取自http://wiki.apache.org/tomcat/FAQ/Connectors的利弊

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

将 Tomcat 与 Apache 集成的原因有很多。也不应该这样做是有原因的。不用说,每个人都会不同意这里的意见。有了 Tomcat 5 和 6 的性能,性能原因变得更难证明。所以这里是集成与不集成的问题。

  • 集群。通过使用 Apache 作为前端,您可以让 Apache 充当您的内容到多个 Tomcat 实例的前门。如果您的某个 Tomcat 发生故障,Apache 会忽略它,您的系统管理员可以彻夜难眠。如果您使用硬件负载平衡器和 Tomcat 的集群功能,则可以忽略这一点。
  • 集群/安全。您还可以使用 Apache 作为不同 Tomcat 的前门,用于不同的 URL 命名空间(/app1/、/app2/、/app3/ 或虚拟主机)。然后,Tomcat 可以每个都在受保护的区域中,从安全的角度来看,您只需要担心 Apache 服务器。从本质上讲,Apache 变成了一个智能代理服务器。
  • 安全。这个话题可以左右任何一种方式。 Java 拥有安全管理器,而 Apache 在安全方面拥有更大的份额和更多的技巧。我不会更详细地讨论这个,但让谷歌成为你的朋友。根据您的情况,一个可能比另一个更好。但也请记住,如果您使用 Tomcat 运行 Apache - 您需要保护两个系统,而不是一个。
  • 附加组件。添加 CGI、perl、PHP 对 Apache 来说非常自然。对于Tomcat来说,它的速度更慢,更像是一个杂物。 Apache还有数百个模块可以随意插入。 Tomcat可以有这个能力,但是代码还没有写出来。
  • 装饰师!在 Tomcat 前面使用 Apache,您可以执行 Tomcat 不支持或没有即时代码支持的任意数量的装饰器。例如,可以为 Tomcat 编写 mod_headers、mod_rewrite 和 mod_alias,但既然 Apache 做得这么好,为什么还要重新发明轮子呢?
  • 速度。 Apache 在提供静态内容方面比 Tomcat 更快。但除非你有一个高流量的网站,否则这一点是没有用的。但在某些场景下,tomcat 可以比 apache 更快。因此,对您的网站进行基准测试。
  • 套接字处理/系统稳定性。 Apache 对错误条件的套接字处理比 Tomcat 更好。主要原因是 Tomcat 必须通过需要跨平台的 JVM 执行其所有套接字处理。问题是套接字优化是特定于平台的考验。大多数情况下,java 代码都很好,但是当您还受到连接断开、无效数据包、来自无效 IP 的无效请求的轰炸时,Apache 在删除这些错误条件方面比基于 JVM 的程序做得更好。 (YMMV)

【讨论】:

  • 非常好的 apache 营销。但我与 tomcat 有联系……公司政策:-)
  • 公司政策拒绝解决明显问题?这意味着您甚至不允许将 apache 作为前端进行基准测试,提供静态内容?哇。
  • 我希望您不要将其归类为营销(我没有任何股票投资于 Apache),我确实认为这种类型的部署(Apache 作为前端)是一种常见的配置,并且考虑过作为最佳实践
  • 我们有 99% 的动态内容。 “凭借 Tomcat 5 和 6 的性能,性能原因变得更难证明其合理性。”我们想继续使用tomcat...我只想微调配置...
【解决方案2】:

您可以使用JMeter 进行调整。我认为很大程度上取决于您的特定硬件设置。 扩展站点的一种可能方法是添加机器。查看Velocity ConferenceHigh Scalability website

【讨论】:

  • 是的,我知道我可以使用更多机器进行扩展。但首先我想充分利用已经在使用的硬件。
【解决方案3】:

我还会考虑调整底层 JVM,而不仅仅是 tomcat——请查看 this question 以获得一些好的技巧,尤其是关于垃圾收集和内存分配的技巧。根据我的经验,JVM 调优比 Tomcat 的内部调优更有效。

【讨论】:

  • 感谢您的回答。但这没有问题。 GC 非常优化。
【解决方案4】:

你应该看看

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

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

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    相关资源
    最近更新 更多