静态网站永远不会占用大量内存?

时间:2015-05-12 13:06:13

标签: performance apache http server

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

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

Q1。我想托管静态页面的apache服务器永远不会占用大量内存?

Q2。要对Apache服务器进行基准测试,您经常使用哪个动态网站?像一个开源的PHP网站?

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

1 个答案:

答案 0 :(得分:0)

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

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

由于机器有4GB RAM,假设每个工作者消耗2M内存,那么最大工作数设置为430.注意我们需要在这里指定ServerLimit指令,否则它会在我启动apache时抱怨。

编辑:

  1. 提供2KB的html页面不是内存密集型的。使用top命令,我看到每个www-data进程占用0.2%的内存。所以430过程应该是0.2 * 430%= 86%。但它远不如此,因为top中的资源记帐不包括共享共享内存,因此不准确。使用smem -u命令,我看到用户www-data的meomry用法(USS和PSS)要小得多。

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

  3. 最后我决定使用php test pages。我创建了其中的12个(例如,1.php,2.php等)。每个页面只打印<?php phpinfo(); ?>。这样,每个页面都会运行一些CPU和内存。我看到内存使用量增加到接近1.8GB。

  4. 事实证明MaxRequestWorker设置为430并不总能产生最佳性能!更具体地说,在使用php测试页面(Point#3)的情况下,将其设置为32会产生与430个进程相同的吞吐量(即响应/ s),但平均响应时间减少200ms!换句话说,拥有更少的请求工作者会使服务器响应更快