Apache prefork 优化 - 选择正确的 `MaxRequestsPerChild` 值

Apache prefork 优化 - 选择正确的 `MaxRequestsPerChild` 值

我正在尝试优化我们的 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 小于该值的值。

相关内容