我正在尝试优化我们的Web服务器以处理尽可能多的连接.我读了很多帖子和Apache笔记.我试图了解我应该为MaxRequestsPerChild选择哪个值.
起初,我已经尝试将其设置为4,000,但服务器很难处理许多请求,所以我开始提高它.目前我的设置是:
<IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 40000 </IfModule>
将MaxRequestsPerChild设置为40,000后,服务器设法处理更多连接,同时不使用更多内存/ cpu.
任何人都可以告诉我这个值是否太高或者是否可以获得如此高的价值?
谢谢!
OS信息:
[root@web06 ~]# uname -a Linux web 2.6.18-164.el5PAE #1 SMP Thu Sep 3 04:10:44 EDT 2009 i686 i686 i386 GNU/Linux [root@web06 ~]# free total used free shared buffers cached Mem: 3814660 3502968 311692 0 144368 2970468 -/+ buffers/cache: 388132 3426528 Swap: 5210104 0 5210104
解决方法
MaxRequestsPerChild实际上仅用于在运行动态脚本时限制内存泄漏量.如果您只是提供静态内容或非常小/简单的脚本,那么您可以将其设置为0或非常高而没有太大影响.如果您正在运行更大/更复杂的脚本,那么将其设置为0 / high将导致Apache进程占用越来越多的内存.具体多少取决于您的具体应用.
另一方面,将其设置得非常低实际上可能会导致cpu使用率略高,因为Apache进程不断重启.
我会做一个简单的测试,看看你的进程可以使用多少内存.将MaxRequestsPerChild设置为0并重新启动Apache.测试加载几页,看看Apache进程的初始大小使用top.几小时/几天/周后再次检查(取决于您的应用程序和页面浏览量),看看它是如何增长的.如果它不会增长很多,那么MaxRequestsPerChild的0或非常大的值应该没问题.
如果您为Apache进程设置了最大大小(即,您希望它们为50MB或更少),那么您可以使用各种MaxRequestsPerChild值进行相同的测试,直到找到使Apache保持小于该值的值.