【发布时间】:2015-02-03 21:42:25
【问题描述】:
我们在进行负载测试时遇到了 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、内存等)。任何想法或想法将不胜感激。
【问题讨论】:
标签: apache