【问题标题】:Static web sites are never memory intensive?静态网站永远不会占用大量内存?
【发布时间】:2015-07-23 09:12:00
【问题描述】:

我使用 httperf 向运行 apache http 服务器的 VM 发起请求。服务器托管 10,000 个静态 html 页面。虚拟机有 4GB 内存。

我有 6 台物理机向 VM 发出 600 个请求/秒。我发现虚拟机的内存从未饱和。即使我提高了请求率,但响应率不再增长,我在 VM 中运行 top 命令查看内存利用率,它从未超过 2.5GiB。

第一季度。我猜托管静态页面的 apache 服务器永远不会占用大量内存?

第二季度。对 apache 服务器进行基准测试,你经常使用什么动态网站?像一个开源的 php 网站?

编辑: 我之前没有提到 html 文件的大小。平均为 2KB 页面。

【问题讨论】:

  • 如果只是将文件内容流式传输到http连接,它不需要很多内存。但是,每个连接都需要一些开销,如果并发连接太多,apache 最终可能会崩溃。
  • 显然,在您耗尽物理资源之前,您的 Apache 设置已经达到了一些设置限制。您是否尝试过针对高流量调整 Apache 参数?见httpd.apache.org/docs/2.2/misc/perf-tuning.html
  • @Rage。你说的对。默认的 apache 设置对性能有限制。我很快就会发布我的调整。

标签: performance apache http server


【解决方案1】:

事实证明,我的 apache 服务器没有调到最佳性能。默认情况下,mpm_prefork 模块的设置未针对最高吞吐量进行调整。我将参数增加如下:

<IfModule mpm_prefork_module>
          ServerLimit           430
        StartServers                     5
        MinSpareServers           5
        MaxSpareServers          10
        MaxRequestWorkers         430
        MaxConnectionsPerChild   50000
</IfModule>

由于机器有4GB RAM,假设每个worker消耗2M内存,那么最大worker数设置为430。注意这里需要指定ServerLimit指令,否则启动apache时会报错。

编辑:

  1. 提供 2KB html 页面不会占用大量内存。使用top 命令我看到每个www-data 进程消耗0.2% 的内存。所以 430 进程应该是 0.2*430% = 86%。但它比这要少得多,因为top 中的资源核算不包括共享共享内存,因此不准确。使用smem -u 命令我看到用户www-data 的内存使用量(USS 和PSS)要小得多。

  2. 我尝试在服务器中放置一些随机生成的 5MB 文件。但内存利用率几乎与 2KB 页面相同。响应时间更大,因为传输大文件需要更长的时间。使用 5MB 的文件基本上会饱和网络而不是内存!

  3. 最后我决定使用php test pages。我创建了 12 个(例如,1.php、2.php 等)。每页只打印&lt;?php phpinfo(); ?&gt;。这样,每个页面都会锻炼一些 CPU 和内存。我看到内存使用量增加到近 1.8GB。

  4. 事实证明,MaxRequestWorker 设置为 430 并不总是产生最佳性能!更具体地说,在使用 php 测试页面的情况下(第 3 点),将其设置为 32 会产生与 430 个进程相同的吞吐量(即响应/秒),但平均响应时间要少 200 毫秒!换句话说,请求工作人员越少,服务器的响应速度就越快

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多