Apache调优许多长期运行的请求

Nolt2232

在进行负载测试时,我们遇到了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

从CPU,内存或网络的角度来看,Apache所运行的服务器没有负担。看来我们的硬件应该能够处理更多的负载,但是我们遇到了来自mpm_winnt模块的1920个看似人为的限制。

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

Nolt2232

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章