Apache prefork优化 – select正确的`MaxRequestsPerChild`值

我试图优化我们的Web服务器来处理尽可能多的连接。 我读了很多post和Apache的说明。 我试图了解我应该为MaxRequestsPerChildselect哪个值。

起初,我已经尝试将它设置为4000,但服务器处理很多请求时遇到困难,所以我开始提高它。 目前我的设置是:

 <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实际上仅用于在运行dynamic脚本时限制内存泄漏量。 如果您只是提供静态内容或非常小的/简单的脚本,那么您可以将它设置为0或非常高,没有太大的影响。 如果您运行的是较大/复杂的脚本,那么将其设置为0 / high将导致您的Apache进程占用越来越多的内存。 具体多less取决于您的具体应用。

另一方面,将其设置得非常低可能会导致CPU使用率稍微增加,因为Apache进程正在不断重新启动。

我会做一个简单的testing,看看你的进程可以使用多less内存。 将MaxRequestsPerChild设置为0并重新启动Apache。 testing加载几页,看看Apache进程使用的最初的大小。 几个小时/天/周后再次检查(取决于您的应用程序和页面浏览量),看看它是如何增长的。 如果它的增长不是很大,那么MaxRequestsPerChild的0或非常大的值应该没问题。

如果你为Apache进程设置了一个最大的大小(例如,你希望它们是50MB或更less),那么你可以用MaxRequestsPerChild不同值进行相同的testing,直到find一个使Apache保持不变的值。