我阅读了许多关于Apacheconfiguration的文章,并试图为我们的服务器find最好的价值。 为了确定什么是最好的,我使用JMeter来模拟每秒2100个连接。 经过多轮的微调,我得到了以下configuration:
<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
我知道我的configuration有点高,但configuration给了我压力testing最好的结果。 我会感激你的意见,我应该改变什么?
请注意 – 我知道Apache有更好的select,但目前我没有资源做这种改变。
谢谢!
那么,你的服务器是否能够运行2048个并发的Apache进程(如你在ServerLimit / MaxClients中设置的那样)呢? 我敢打赌,它不是,实际上你不需要这么多并发的Apache工作者。 我强烈build议你设置一个像nginx或lighttpd这样的asynchronous反向代理来卸载处理客户端,并慢速连接到这个asynchronous代理。 相信我,大多数公共Web客户端都足够慢,以至于大部分Apache工作人员只需要处理上传已经生成的内容给他们。 如果您正确设置反向代理,我认为您不需要超过25个并发的Apache工作者。