Apache 停止运行 WordPress

Apache 停止运行 WordPress

我的 wordpress 博客在遵循 apache prefork 设置的情况下运行了几个月(~4000 DAU),没有任何问题:

<IfModule mpm_prefork_module>
StartServers    2
MinSpareServers 5
MaxSpareServers 10
ServerLimit     50
MaxClients  100
MaxRequestsPerChild 3000
</IfModule>

本月,我的日活跃用户数为 5000,虽然不是高峰,但一直在稳步增长。过去 3 天,Apache 开始消耗所有内存(1GB Ram - VPS),服务器没有响应。我尝试更改了很多设置,但它仍然会随机崩溃。

这是我最近的设置:

<IfModule mpm_prefork_module>
StartServers    2
MinSpareServers 3
MaxSpareServers 6
ServerLimit     100
MaxClients  50
MaxRequestsPerChild 3000
</IfModule>

我正在使用 wordpress supercache 插件和 google sitemap 插件。有人能给我一些提示,告诉我如何阻止 apache crush 吗?提前谢谢大家!

Apache Version - 2    
PHP Version - 5.2    
MySQL DB - 5
Wordpress - 2.9

答案1

如果 supercache 正在运行,并且您的访问者没有启用 cookies,则应通过 mod_rewrite 向他们提供静态文件(前提是 mod_rewrite 规则正确到位)。如果您受到搜索引擎机器人或登录用户的攻击,则该网站将被实时查看。

我怀疑该问题可能与 mysql 在构建侧边栏时花费太长时间响应查询有关。

发生这种情况时,您可以这样做:

mysqladmin -u root -ppassword processlist > /var/tmp/mysql.processlist
ps aux > /var/tmp/processlist
uptime > /var/tmp/uptime
free > /var/tmp/free
iostat 5 5 > /var/tmp/iostat
vmstat 5 5 > /var/tmp/vmstat

我怀疑第一个会显示十几个锁定的查询。如果您正在运行日历小部件,这将是第一个要删除的东西。

答案2

您需要做的第一件事是将 MaxClients 编辑为 100。MaxClients 和 ServerLimit 实际上是同义词,应始终设置为相同值。如果它们不同,则将使用最低值。

服务器限制 100 最大客户端数 100

假设您的服务器可以处理 100 个客户端,那么这可能会有所帮助。Apache 经常崩溃,因为您使用的设置不允许它使用所有可用的 CPU 和 RAM,这会导致请求排队,最终导致系统崩溃,即使如果设置不同,这些请求可以得到快速处理。您应该调查此站点上其他回复中的所有其他 MPM 相关设置,并了解和调整您的 Keepalive 和 Keepalivetimeout 设置以确保它们达到最佳状态。

我还建议设置 mod_status 和 /server-status/(相同的东西),这样当服务器没有响应时,您可以检查服务器有多少个进程以及它们处于什么状态。您还应该在出现问题时使用 top/htop 监视服务器,以查看 RAM 和 CPU 创建的模式。

答案3

你只有 1GB 的 RAM。看看单个 httpd 进程使用了​​多少内存,然后用你的 1GB 除以这个值(为操作系统等留出一点空间)。由于 Wordpress 是一个php程序,很可能每个工作者的内存使用量明显高于 20GB,这是您在原始配置中支持 50 个工作者的极限。(50 * 20GB = 你的 RAM 就用完了。)

您目前正在运行多少个工作线程,它们的内存使用情况是多少?

相关内容