【问题标题】:Apache tuning for numerous long running requestsApache 调整大量长时间运行的请求
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-01-12
      • 2012-02-16
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多