我们目前使用{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"
/>
答案 0 :(得分:6)
您应该考虑服务器可能获得的工作量。
最重要的因素可能是高峰时段同时连接的客户端数量。尝试确定它并以下列方式调整您的设置:
通过这种设置,您可以最大限度地减少服务器的内部维护开销,这可能会有很大帮助,尤其是当您的负载是零星的时候。
例如,考虑一个应用程序,其中您有大约300个新请求/秒。每个请求平均需要2.5秒才能完成。这意味着在任何给定时间您都需要同时处理约750个请求。在这种情况下,您可能希望调整服务器,使其在启动时具有~750个处理线程,并且您可能希望最多添加~1000个处理线程以处理极高负载。
还要考虑到你需要一个线程的确切内容。在前面的示例中,每个请求都独立于其他请求,没有使用会话跟踪。在更“web-ish”的场景中,您可能会让用户登录到您的网站,并且根据您使用的软件,Apache和/或Tomcat可能需要使用相同的线程来为一个会话中的请求提供服务。在这种情况下,您可能需要更多线程。但是至少我知道Tomcat,你不需要考虑这个,因为无论如何它都适用于内部的线程池。
答案 1 :(得分:5)
这是您的apache应该立即处理的并行客户端连接的基本上限。
使用prefork,每个进程只能处理一个请求。因此,整个apache可以在处理单个请求所花费的时间内处理最多 $ MaxClients请求。当然,只有当应用程序每个请求需要少于1 / $ MaxClients资源时,才能达到理想的最大值。
例如,如果应用程序需要花费第二个cpu-time来回答单个请求,则将MaxClients设置为4会将吞吐量限制为每秒4个请求:每个请求都会使用apache连接,而apache只会处理4个一次。但是如果服务器只有两个CPU,那么甚至不能达到这个目标,因为每个挂钟只有两个CPU秒,但请求需要4个CPU秒。
这告诉apache有多少空闲进程应该挂起。这个数字越大,在需要产生额外进程之前,apache可以吞下的爆发负载越多,这种情况很昂贵,从而减慢了当前的请求。
正确设置取决于您的工作量。如果您的网页包含许多子请求(图片,iframe,javascript,css),那么点击单个页面可能会在短时间内耗尽更多流程。
有太多未使用的apache进程只是浪费内存,因此apache使用MaxSpareServers数来限制它为请求突发保留的备用进程数量。
这限制了单个进程在其整个生命周期中处理的请求数。如果您非常关注稳定性,那么您应该在此处设置一个实际限制来持续回收apache进程,以防止资源泄漏影响系统。
这只是apache默认启动的进程数量。将此设置为正常运行的apache进程数量,以减少系统的预热时间。即使您忽略此设置,apache也会使用Min- / MaxSpareServers值根据需要生成新进程。
答案 2 :(得分:1)
默认设置通常是不错的起点,以查看您的应用程序真正需要的内容。我不知道你期望有多少流量,所以猜测MaxThreads,MaxClients和MaxServers有点困难。我可以告诉你,我处理的大多数客户(主要负责管理Tomcat中运行Java应用程序的客户的Linux网络主机)使用默认设置已经很长时间没有太多调整了。
如果你没有期待太多流量,那么这些设置“太高”真的不应该影响你太多。除非有必要,否则Apache不会为整个256个潜在客户分配资源。 Tomcat也是如此。