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

Kuf*_*Kuf 9 linux optimization mpm-prefork apache-2.2

我正在尝试优化我们的 Web 服务器以处理尽可能多的连接。我阅读了很多帖子和 Apache 笔记。我试图了解我应该为 选择哪个值MaxRequestsPerChild

起初,我尝试将其设置为 4,000,但服务器在处理许多请求时遇到困难,因此我开始提高它。目前我的设置是:

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  40000
</IfModule>
Run Code Online (Sandbox Code Playgroud)

将 设置MaxRequestsPerChild为 40,000 后,服务器设法在不使用更多内存/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
Run Code Online (Sandbox Code Playgroud)

ues*_*esp 11

MaxRequestsPerChild在运行动态脚本时,它实际上仅用于限制随时间推移的内存泄漏量。如果您只是提供静态内容或非常小/简单的脚本,那么您可以将其设置为 0 或非常高而不会产生太大影响。如果您正在运行更大/复杂的脚本,那么将其设置为 0/high 将导致您的 Apache 进程消耗越来越多的内存。具体多少取决于您的具体应用。

另一方面,将它设置得非常低实际上可能会导致 CPU 使用率略高,因为 Apache 进程会不断重新启动。

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

如果您为 Apache 进程设置了最大大小(即,您希望它们为 50MB 或更少),那么您可以使用 的各种值进行相同的测试,MaxRequestsPerChild直到找到使 Apache 小于该值的值。