java – 配置Apache / Tomcat的最佳做法

我们目前正在使用Apache 2.2.3和Tomcat 5(嵌入在JBoss 4.2.2中),使用mod_proxy_jk作为连接器。

有人可以通过正确的方法来计算/配置下面的值(以及可能相关的其他内容)。 Apache和Tomcat都在独立的机器上运行,并且拥有大量的RAM(每个4GB)。

相关的server.xml部分:

<Connector port="8009"
           address="${jboss.bind.address}"
           protocol="AJP/1.3"
           emptySessionPath="true"
           enableLookups="false"
           redirectPort="8443"
           maxThreads="320"
           connectionTimeout="45000"
    />

相关httpd.conf部分:

<IfModule prefork.c>
  StartServers       8
  MinSpareServers    5
  MaxSpareServers   20
  ServerLimit      256
  MaxClients       256
  MaxRequestsPerChild  0
</IfModule>
您应该考虑服务器可能获得的工作负载。

最重要的因素可能是在高峰时间同时连接的客户端的数量。尝试确定它并调整您的设置,方式如下:

> Apache和Tomcat中都有足够的处理线程,当服务器负载过重时,它们不需要生成新的线程
>在服务器中处理线程没有更多的需求,因为它们会浪费资源。

通过这种设置,您可以最大限度地减少服务器的内部维护开销,这可能有很大帮助,特别是当您的负载是零星的时候。

例如考虑一个你有〜300个新请求/秒的应用程序。每个请求平均需要2.5秒的时间。这意味着在任何给定的时间你有〜750个需要同时处理的请求。在这种情况下,您可能需要调整服务器,以便在启动时具有〜750个处理线程,您可能希望添加最多1000个处理线程来处理极高的负载。

还要考虑到你需要一个线程。在前面的示例中,每个请求与其他请求是独立的,没有使用会话跟踪。在更多的“web-ish”场景中,您可能有用户登录到您的网站,根据您使用的软件,Apache和/或Tomcat可能需要使用相同的线程来服务于一个会话中的请求。在这种情况下,您可能需要更多的线程。但是,至少我知道Tomcat,您不需要考虑这一点,因为它可以内部使用线程池。

http://stackoverflow.com/questions/105754/best-practices-for-configuring-apache-tomcat

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 配置Apache / Tomcat的最佳做法