该服务器运行着大约 40 个 WordPress 网站。最初,当服务器有 2GB 内存时,我使用 mod_php 和 mpm-prefork 设置服务器,并且运行良好。然而,最近,我更新了服务器以使用 FastCGI、suexec 和 mpm-worker。从那时起,我无法让 Apache 停止吞噬所有可用 RAM,直到它开始交换并最终停止响应。
我们将服务器从 2GB 增加到 4GB,希望能缓解这个问题,但大约 7 个小时后,服务器占用了全部 4GB 并重新进入交换状态。
在 mpm-prefork 下,我们只需设置 MaxClients,一切就都正常了。然而,就我的经验而言,在 mpm-worker 下,我找不到似乎有效的设置。MaxRequestsPerChild、ThreadsPerChild 和 MaxClients 的任何组合仍然会导致相同的结果。我以前从未使用过 mpm-worker,所以我不确定如何调整它。我花了无数个小时搜索 Apache2.conf 中的设置,并尝试了几十种设置,但它们都导致服务器耗尽所有内存。
对于 4GB 的服务器,留出大约 400MB 的空间用于其他进程,并且知道每个 Apache 子线程在启动时大约运行 50MB,那么哪种设置组合可以舒适地防止服务器耗尽 RAM?
当前的设置:
<IfModule mpm_worker_module>
StartServers 6
ServerLimit 25
MinSpareThreads 25
MaxSpareThreads 50
ThreadLimit 75
ThreadsPerChild 25
MaxClients 75
MaxRequestsPerChild 2000
答案1
mod_fcgid
我在 Amazon EC2 上运行的微型虚拟机上运气不错mpm-prefork
。我不需要做任何调整,但我的工作量与你的不同。
但你应该做的是找出 WordPress 的哪个部分占用了这么多 RAM。我假设你通过大量网络用户使用了大量 RAM,而不仅仅是因为 Apache 运行了一段时间。