我正在尝试优化我们的 Web 服务器以处理尽可能多的连接。我阅读了许多帖子和 Apache 说明。我试图了解应该为 选取哪个值MaxRequestsPerChild
。
一开始我尝试将其设置为 4,000,但服务器难以处理大量请求,因此我开始提高它。目前我的设置是:
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 40000
</IfModule>
将其设置为 40,000 后,MaxRequestsPerChild
服务器可以处理更多连接,同时不使用更多内存/CPU。
谁能告诉我这个值是否太高或者这么高的值是否可以?
谢谢!
操作系统信息:
[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
答案1
MaxRequestsPerChild
实际上仅在运行动态脚本时限制内存泄漏量时才有用。如果您仅提供静态内容或非常小/简单的脚本,那么您可能可以将其设置为 0 或非常高而不会产生太大影响。如果您正在运行更大/更复杂的脚本,那么将其设置为 0/高将导致您的 Apache 进程消耗越来越多的内存。具体消耗多少取决于您的特定应用程序。
另一方面,将其设置得非常低实际上可能会导致 CPU 使用率略有增加,因为 Apache 进程不断重新启动。
我会做一个简单的测试,看看您的进程可以使用多少内存。设置MaxRequestsPerChild
为 0 并重新启动 Apache。测试加载几个页面,看看 Apache 进程使用的初始大小是多少top
。几个小时/几天/几周后再次检查(取决于您的应用程序和页面浏览量),看看它如何增长。如果它没有增长太多,那么 0 或非常大的值MaxRequestsPerChild
应该没问题。
如果您为 Apache 进程设置了最大大小(即,您希望它们为 50MB 或更小),那么您可以对各种值进行相同的测试,MaxRequestsPerChild
直到找到一个使 Apache 小于该值的值。