Apache调整许多长时间运行的请求

时间:2015-02-03 21:42:26

标签: apache

我们在进行负载测试时遇到Apache的性能问题,并且想知道是否存在我们缺少的配置。在我们的环境中,Apache提供静态UI内容,并平衡少数Tomcat服务器之间的负载。

我们的应用程序的一个主要组件是处理大量文件的大量同时上传。这些上传请求命中了Apache,它将请求代理到Tomcat服务器,在那里将文件保存到磁盘并完成其他一些小操作。由于文件的大小,单个上载请求可能需要一段时间。在我们的负载测试中,我们试图找到一次可以处理多少上传的限制。

我们所有的服务器都是Windows,因此mpm的唯一选择是mpm_winnt。使用mpm_winnt,每个孩子的最大线程数为1920,因此最大可能的配置似乎是:

<IfModule mpm_winnt.c>
  ThreadsPerChild       1920
  MaxRequestsPerChild     0
</IfModule>

当我们增加负载以进行数千次同步上传时,事情就会陷入困境并变得无法应对。如果我们在负载测试期间直接访问Tomcat,我们会得到快速响应,因此瓶颈似乎是Apache。

我们启用了mod_status,而/ server-status页面显示以下内容,这似乎证明Apache正在最大化:

1920 requests currently being processed, 0 idle workers

运行的Apache服务器不会从CPU,内存或网络角度征税。看起来我们的硬件应该能够处理更多的负载,但是我们遇到了来自mpm_winnt模块的1920个请求的这种看似人为的限制。

我们可以做些什么来提高这个门槛?我们希望限制因素与硬件相关(即最大网络流量,CPU,内存等)。任何想法或想法将不胜感激。

1 个答案:

答案 0 :(得分:1)

事实证明,1920是默认的线程限制,每个子元素的值不能超过线程限制,这就是为什么我不能超过1920个线程。我无法在任何配置文件中找到线程限制配置,这有点奇怪,因为Apache中的大多数设置通常都是默认值或在配置文件中注释掉。无论如何,我添加了它,如下所示,并且能够将线程数增加到15,000,这是mpm_winnt的最大值。

<IfModule mpm_winnt_module>
   ThreadLimit              15000
   ThreadsPerChild          15000
   MaxConnectionsPerChild   0
</IfModule>