[Java] 配置Apache / Tomcat的最佳实践



Answers

MaxClients的

这是您的apache应该一次处理的并行客户端连接的基本上限。

使用prefork,每个进程只能处理一个请求。 因此整个apache 处理单个请求所花费的时间内最多可以处理$ MaxClients请求。 当然,只有当应用程序每个请​​求需要小于1 / $ MaxClients资源时才能达到理想的最大值。

例如,如果应用程序花费了一秒的CPU时间来回答单个请求,那么将MaxClients设置为4会将吞吐量限制为每秒四个请求:每个请求使用一个apache连接,而apache一次只能处理四个请求。 但是,如果服务器只有两个CPU,甚至不能达到,因为每个挂钟只有两个cpu秒,但是这些请求需要四个cpu秒。

比MinSpareServers

这告诉Apache有多少空闲进程应该挂起。 这个数字越大,在需要产生额外的进程之前,apache可以吞噬的爆发越多,这是昂贵的,从而减缓了当前的请求。

这个正确的设置取决于你的工作量。 如果您的页面包含许多子请求(图片,iframe,javascript,css),那么点击一个页面可能会在短时间内耗尽更多的流程。

MaxSpareServers的

有太多未使用的apache进程只是浪费内存,因此apache使用MaxSpareServers数量来限制备用进程的数量,以保留突发的请求。

MaxRequestsPerChild

这限制了单个进程在其整个生命周期内处理的请求数量。 如果你非常关心稳定性,你应该在这里设置一个实际的限制来持续地回收Apache进程,以防止资源泄漏影响系统。

StartServers的

这只是apache默认启动的进程数量。 将其设置为通常运行apache进程的数量,以减少系统的预热时间。 即使你忽略这个设置,apache也会根据需要使用Min- / MaxSpareServers值产生新的进程。

更多信息

另请参阅apache的多处理模块的文档

Question

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

有人可以通过正确的方式来计算/配置下面的值(以及其他可能相关的东西)。 Apache和Tomcat都运行在不同的机器上,并且有大量内存(每个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>





Links