Apache 针对大量 运行 长请求进行调优
Apache tuning for numerous long running requests
我们在进行负载测试时 运行 遇到了 Apache 的性能问题,并且想知道是否缺少某些配置。在我们的环境中,Apache 提供静态 UI 内容并在几个 Tomcat 服务器之间平衡负载。
我们应用程序的一个主要组成部分是处理大量同时上传的相当大的文件。这些上传请求命中 Apache,Apache 将请求代理到 Tomcat 服务器,文件被保存到磁盘并完成其他一些小事情。由于文件的大小,单个上传请求可能需要一段时间。在我们的负载测试中,我们试图找到一次可以处理的上传数量的限制。
我们所有的服务器都是 Windows,所以我们对 mpm 的唯一选择是 mpm_winnt。对于 mpm_winnt,每个 child 的最大线程数为 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、内存等)。任何想法或想法将不胜感激。
事实证明,1920 是默认的线程限制,每个子线程值不能超过线程限制,这就是为什么我不能超过 1920 个线程的原因。我无法在任何配置文件中找到线程限制配置,这有点奇怪,因为 Apache 中的大多数设置通常以默认值显示或在配置文件中被注释掉。无论如何,我如下所示添加它并且能够将线程数增加到 15,000,这是 mpm_winnt.
的最大值
<IfModule mpm_winnt_module>
ThreadLimit 15000
ThreadsPerChild 15000
MaxConnectionsPerChild 0
</IfModule>
我们在进行负载测试时 运行 遇到了 Apache 的性能问题,并且想知道是否缺少某些配置。在我们的环境中,Apache 提供静态 UI 内容并在几个 Tomcat 服务器之间平衡负载。
我们应用程序的一个主要组成部分是处理大量同时上传的相当大的文件。这些上传请求命中 Apache,Apache 将请求代理到 Tomcat 服务器,文件被保存到磁盘并完成其他一些小事情。由于文件的大小,单个上传请求可能需要一段时间。在我们的负载测试中,我们试图找到一次可以处理的上传数量的限制。
我们所有的服务器都是 Windows,所以我们对 mpm 的唯一选择是 mpm_winnt。对于 mpm_winnt,每个 child 的最大线程数为 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、内存等)。任何想法或想法将不胜感激。
事实证明,1920 是默认的线程限制,每个子线程值不能超过线程限制,这就是为什么我不能超过 1920 个线程的原因。我无法在任何配置文件中找到线程限制配置,这有点奇怪,因为 Apache 中的大多数设置通常以默认值显示或在配置文件中被注释掉。无论如何,我如下所示添加它并且能够将线程数增加到 15,000,这是 mpm_winnt.
的最大值<IfModule mpm_winnt_module>
ThreadLimit 15000
ThreadsPerChild 15000
MaxConnectionsPerChild 0
</IfModule>