调整 php fpm 配置

调整 php fpm 配置

最近我的服务器(i7-2600 @ 4x3.4ghz,8GB Ram)的平均负载非常高。我缓存了最受欢迎的页面,并尝试删除它们以测试是否是它们的问题,但没有发现任何重大变化。

当我重新启动服务器时,平均负载低于 1.0,然后突然它开始增长并变为 6.0 - 25.00,并且我收到 504 网关超时错误,并且 ssh 变得非常慢,这导致了很多问题。

我认为这与我的 php-fpm 配置有关,因为我一直在使用 mysqltuner.pl 并按照那里的说明进行操作,另外正如我所说,我已经缓存并删除了几分钟最受欢迎的页面,而且它们还有带有左连接等的大量查询,但这并没有带来显着的变化,我的意思是负载可能会下降约 5%,但这不是我想要的。

我的网站每 5 分钟大约有 500 个独立用户(Google 分析实时统计数据),每秒大约有 5-15 次页面浏览量。

这是我的 php-fpm 配置,有人可以建议调整什么吗?

pm = 动态

下午.max_children = 500

pm.start_servers = 400

pm.min_spare_servers = 50

pm.max_spare_servers = 500

pm.max_requests = 0

答案1

您不太可能有足够的 RAM 来运行 500 个 PHP 进程。在我的机器上,它们通常每个占用 40-80MB,具体取决于它们正在执行的操作。

因此,这里发生的事情是,当您启动 PHP 时,它会尝试启动 400 个自身的副本,因为这是您所指定的。但您需要的 RAM 至少是当前 RAM 的两倍!因此,机器很快就会开始交换,然后停止运行。

大幅降低这些数字,直到完全超出您的记忆范围。您不需要同时运行 400 个进程来处理每秒 5-15 个页面浏览量。

您还应该设置一个值,以防pm.max_requestsPHP 或您正在使用的其他 PHP 模块发生内存泄漏。不幸的是,这些情况太常见了。

要重新控制您的服务器,请尝试执行以下操作:

pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 50
pm.max_requests = 500

这为您提供了足够的空间来处理正常流量和高达正常负载 5 倍的峰值。pm.max_children如果您开始变得更加繁忙并看到有关子项用尽的日志条目,您可以提高,但在这样做之前请检查您的可用 RAM;如果您真的到了那个地步,您可能必须升级服务器。

相关内容