我们目前正在使用Apache 2.2.3和Tomcat 5(嵌入在JBoss 4.2.2中)mod_proxy_jk
作为连接器.
有人可以详细说明计算/配置下面的值的正确方法(以及其他可能相关的值).Apache和Tomcat都在不同的机器上运行,并且有大量的ram(每个4gb).
相关的server.xml部分:
相关的httpd.conf部分:
StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 0
Zizzencs.. 7
您应该考虑服务器可能获得的工作负载.
最重要的因素可能是高峰时间同时连接的客户端数量.尝试确定它并以下列方式调整您的设置:
Apache和Tomcat中有足够的处理线程,当服务器负载很重时,它们不需要生成新线程
服务器中的处理线程数量不会超过需要,因为它们会浪费资源.
通过这种设置,您可以最大限度地减少服务器的内部维护开销,这可能会有很大帮助,尤其是当您的负载是零星的时候.
例如,考虑一个应用程序,您有大约300个新请求/秒.每个请求平均需要2.5秒才能完成.这意味着在任何给定时间您都需要同时处理约750个请求.在这种情况下,您可能希望调整服务器,以便它们在启动时具有~750个处理线程,并且您可能希望最多添加~1000个处理线程以处理极高负载.
还要考虑你需要一个线程的确切内容.在前面的示例中,每个请求都独立于其他请求,没有使用会话跟踪.在更"web-ish"的场景中,您可能会让用户登录到您的网站,并且根据您使用的软件,Apache和/或Tomcat可能需要使用相同的线程来为一个会话中的请求提供服务.在这种情况下,您可能需要更多线程.但是至少我知道Tomcat,你不需要考虑这个,因为它无论如何都在内部使用线程池.
您应该考虑服务器可能获得的工作负载.
最重要的因素可能是高峰时间同时连接的客户端数量.尝试确定它并以下列方式调整您的设置:
Apache和Tomcat中有足够的处理线程,当服务器负载很重时,它们不需要生成新线程
服务器中的处理线程数量不会超过需要,因为它们会浪费资源.
通过这种设置,您可以最大限度地减少服务器的内部维护开销,这可能会有很大帮助,尤其是当您的负载是零星的时候.
例如,考虑一个应用程序,您有大约300个新请求/秒.每个请求平均需要2.5秒才能完成.这意味着在任何给定时间您都需要同时处理约750个请求.在这种情况下,您可能希望调整服务器,以便它们在启动时具有~750个处理线程,并且您可能希望最多添加~1000个处理线程以处理极高负载.
还要考虑你需要一个线程的确切内容.在前面的示例中,每个请求都独立于其他请求,没有使用会话跟踪.在更"web-ish"的场景中,您可能会让用户登录到您的网站,并且根据您使用的软件,Apache和/或Tomcat可能需要使用相同的线程来为一个会话中的请求提供服务.在这种情况下,您可能需要更多线程.但是至少我知道Tomcat,你不需要考虑这个,因为它无论如何都在内部使用线程池.
这是您的apache应该立即处理的并行客户端连接的基本上限.
使用prefork,每个进程只能处理一个请求.因此,整个apache可以在处理单个请求所花费的时间内处理最多 $ MaxClients请求.当然,只有当应用程序每个请求需要少于1/$ MaxClients资源时,才能达到理想的最大值.
例如,如果应用程序需要花费第二个cpu-time来回答单个请求,则将MaxClients设置为4会将吞吐量限制为每秒四个请求:每个请求都会使用apache连接,而apache一次只能处理四个请求.但是如果服务器只有两个CPU,甚至不能达到这个,因为每个挂钟只有两个CPU秒,但请求需要4个CPU秒.
这告诉apache有多少空闲进程应该挂起.这个数字越大,在需要产生额外进程之前,apache可以吞下的爆发负载越多,这是昂贵的,因此减慢了当前的请求.
正确设置取决于您的工作量.如果您的页面包含许多子请求(图片,iframe,javascript,css),那么点击单个页面可能会在短时间内耗尽更多进程.
有太多未使用的apache进程只是浪费内存,因此apache使用MaxSpareServers数来限制它为请求突发保留的备用进程数量.
这限制了单个进程在其整个生命周期中处理的请求数.如果您非常关注稳定性,则应在此处设置实际限制以持续回收apache进程,以防止资源泄漏影响系统.
这只是apache默认启动的进程数量.将此设置为正常运行的apache进程数量,以减少系统的预热时间.即使您忽略此设置,apache也会使用Min-/MaxSpareServers值根据需要生成新进程.
另请参阅apache的多处理模块的文档.