我阅读了许多关于 Apache 配置的帖子,并尝试找到最适合我们服务器的值。为了确保最佳值,我使用了JMeter模拟每秒 2100 个连接。经过多轮微调后,我得到了以下配置:
<IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 10 ServerLimit 2048 MaxClients 2048 MaxRequestsPerChild 20000 </IfModule>
服务器详细信息:
[root@web06 ~]# free
total used free shared buffers cached
Mem: 3814660 1070152 2744508 0 146788 766944
-/+ buffers/cache: 156420 3658240
Swap: 5210104 0 5210104
[root@web06 ~]# grep -c processor /proc/cpuinfo
4
[root@web06 ~]# uname --a
Linux web06 2.6.18-164.el5PAE #1 SMP Thu Sep 3 04:10:44 EDT 2009 i686 i686 i386 GNU/Linux
单个 Apache 进程使用的内存:
[root@web06 ~]# cat /proc/5903/status | grep VmRSS
VmRSS: 10076 kB
我知道我的配置有点高,但该配置在压力测试中给了我最好的结果。我很感激您的意见,我应该改变什么吗?
请注意 - 我知道有比 Apache 更好的替代品,但目前我没有资源进行这种改变。
谢谢!
答案1
那么,您的服务器是否能够运行 2048 个并发 Apache 进程(如您在 ServerLimit/MaxClients 中设置的)?我敢打赌它不能,实际上您不需要这么多并发 Apache 工作进程。我强烈建议您设置一个异步反向代理,nginx
或者lighttpd
将处理慢速连接的客户端卸载到该异步代理。相信我,大多数公共 Web 客户端的速度都很慢,以至于占用了 Apache 工作进程的大部分时间来处理已生成的内容上传到它们。如果您正确设置了反向代理,我认为您永远不需要超过 25 个并发 Apache 工作进程。