我使用httperf向运行apache http服务器的VM发出请求。该服务器托管10,000个静态html页面。 VM有4GB内存。
我有6台物理机器向VM发出600个请求/秒。我发现VM的内存从未饱和。即使我提高请求率,响应率也不再增长,我在VM中运行top命令来查看内存利用率,它永远不会超过2.5GiB。
Q1。我想托管静态页面的apache服务器永远不会占用大量内存?
Q2。要对Apache服务器进行基准测试,您经常使用哪个动态网站?像一个开源的PHP网站?
编辑: 之前我没有提到html文件大小。平均是2KB页面。
答案 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时抱怨。
编辑:
提供2KB的html页面不是内存密集型的。使用top
命令,我看到每个www-data
进程占用0.2%的内存。所以430过程应该是0.2 * 430%= 86%。但它远不如此,因为top
中的资源记帐不包括共享共享内存,因此不准确。使用smem -u
命令,我看到用户www-data
的meomry用法(USS和PSS)要小得多。
我尝试在服务器中添加一些随机生成的5MB文件。但内存利用率与2KB页面几乎相同。响应时间更长,因为传输大文件需要更长时间。使用5MB文件基本上使网络饱和而不是内存!
最后我决定使用php test pages。我创建了其中的12个(例如,1.php,2.php等)。每个页面只打印<?php phpinfo(); ?>
。这样,每个页面都会运行一些CPU和内存。我看到内存使用量增加到接近1.8GB。
事实证明将MaxRequestWorker
设置为430并不总能产生最佳性能!更具体地说,在使用php测试页面(Point#3)的情况下,将其设置为32会产生与430个进程相同的吞吐量(即响应/ s),但平均响应时间减少200ms!换句话说,拥有更少的请求工作者会使服务器响应更快!