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

标签 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)。但是 peaks 确实使用了 500 个线程。我想当我获得 10 倍用户时我会遇到麻烦 :-)

  • 我该如何调整它?
  • 我应该禁用 http keep alive 吗?如何配置保持事件超时?
  • 什么值适合 acceptCount/maxThreads?

最佳答案

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

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

将 Tomcat 与 Apache 集成的原因有很多。而且也有不应该这样做的原因。毋庸置疑,这里的意见大家会不以为然。随着 Tomcat 5 和 6 的性能,性能原因变得更难证明。因此,这是在集成与不集成时要讨论的问题。

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

关于optimization - Tomcat Web 服务器的最佳设置是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/261046/

相关文章:

MYSQL 在使用 NOT IN 时不使用索引

c# - 在我的案例中如何提高 SQL 查询性能

linux - XCRC 命令导致 550 回复

visual-studio - 如何恢复我的 ReSharper 生成文档标题的快速修复?

java - 在 Java 中使用文件路径的最佳实践

c++ - 使用单射函数索引数组时优化 g++

c++ - Boost Pool 的自由效率是 O(n) 还是 O(1)

apache - 域重定向后在基于 Jsp-Servlet 的应用程序中丢失 session

jakarta-ee - Tomcat 或 Glassfish 上的 Solr?

tomcat - 在 Tomcat 中部署 Appfuse SpringMCV