18

我们目前使用 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>
4

3 回答 3

7

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

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

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

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

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

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

于 2008-09-21T02:44:18.063 回答
5

最大客户数

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

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

例如,如果应用程序需要一秒钟的 cpu 时间来响应单个请求,将 MaxClients 设置为 4 会将您的吞吐量限制为每秒四个请求:每个请求都会占用一个 apache 连接,而 apache 一次只能处理四个. 但是如果服务器只有两个 CPU,就连这个都达不到,因为每个挂钟秒只有两个 cpu 秒,但是请求需要 4 个 cpu 秒。

MinSpareServers

这告诉 apache 应该有多少空闲进程。这个数字越大,apache 在需要生成额外进程之前可以吞下的突发负载就越多,这很昂贵,因此会减慢当前请求的速度。

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

最大备用服务器

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

MaxRequestsPerChild

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

启动服务器

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

更多信息

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

于 2008-09-19T21:49:20.043 回答
1

默认设置通常是很好的起点,可以查看您的应用程序真正需要什么。我不知道您期望多少流量,因此猜测 MaxThreads、MaxClients 和 MaxServers 有点困难。我可以告诉您,与我打交道的大多数客户(为 linux 网络主机工作,主要与在 Tomcat 中运行 Java 应用程序的客户打交道)在相当长的一段时间内都使用默认设置,而无需进行太多调整。

如果您不期望有太多流量,那么这些“太高”的设置也不会对您产生太大影响。除非有必要,否则 Apache 不会为全部 256 个潜在客户分配资源。Tomcat 也是如此。

于 2008-09-20T01:03:59.090 回答