配置Apache / Tomcat的最佳实践

时间:2008-09-19 21:24:31

标签: java apache tomcat jboss mod-proxy

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

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

相关的server.xml部分:

mod_proxy_jk

相关的httpd.conf部分:

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

3 个答案:

答案 0 :(得分:6)

您应该考虑服务器可能获得的工作量。

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

  • Apache和Tomcat中有足够的处理线程,当服务器负载很重时,它们不需要生成新线程
  • 服务器中的处理线程数量不会超过需要,因为它们会浪费资源。

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

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

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

答案 1 :(得分:5)

MaxClients的

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

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

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

比MinSpareServers

这告诉apache有多少空闲进程应该挂起。这个数字越大,在需要产生额外进程之前,apache可以吞下的爆发负载越多,这种情况很昂贵,从而减慢了当前的请求。

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

MaxSpareServers的

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

MaxRequestsPerChild

这限制了单个进程在其整个生命周期中处理的请求数。如果您非常关注稳定性,那么您应该在此处设置一个实际限制来持续回收apache进程,以防止资源泄漏影响系统。

StartServers的

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

更多信息

另见the documentation for apache's multi-processing modules

答案 2 :(得分:1)

默认设置通常是不错的起点,以查看您的应用程序真正需要的内容。我不知道你期望有多少流量,所以猜测MaxThreads,MaxClients和MaxServers有点困难。我可以告诉你,我处理的大多数客户(主要负责管理Tomcat中运行Java应用程序的客户的Linux网络主机)使用默认设置已经很长时间没有太多调整了。

如果你没有期待太多流量,那么这些设置“太高”真的不应该影响你太多。除非有必要,否则Apache不会为整个256个潜在客户分配资源。 Tomcat也是如此。