PHP 运行太慢,总是显示“504 网关超时”

PHP 运行太慢,总是显示“504 网关超时”

PHP 运行太慢,总是显示“504 网关超时”

My server spec:
Dual core ATOM 330 CPU
2GB RAM
Use nginx with PHP in fastcgi
use eaccelerator

CPU 74.3%id
RAM used: 350MB of 2GB

我的服务器上有很多站点,cron 每分钟都在运行,甚至在某些时候,cron 会同时运行两倍或三倍。

我所有站点的 cron 都很重,通常 cron 运行时间超过一分钟。

我的 nginx.conf 变得太大,以至于 nginx 拒绝启动,因为其中的站点太多了。这个问题已经通过增加解决了server_names_hash_max_size。我计划在我的服务器中添加更多站点

现在,打开我的网站总是显示504 Gateway Time-out。我测试了许多加速器和 PHP 设置,但这种情况504 Gateway Time-out仍然发生。

504 Gateway Time-out当 cron 被禁用时,遗嘱就会消失

我不知道:这是因为处理器能力不够吗?

我该怎么办?升级我的处理器?

- - - - 添加

这是top我现在的 CPU:

Cpu(s): 17.5%us,  3.8%sy,  0.1%ni, 71.6%id,  6.9%wa,  0.1%hi,  0.1%si,  0.0%st

答案1

该错误是 nginx 告诉您 PHP 超时。

要确定问题所在,我们需要查看 PHP 代码实际上在做什么。

如果错误与 cron 作业密切相关,并且我假设这些 cron 作业正在运行 PHP 脚本和/或竞争常规 PHP 代码使用的相同资源(可能是 DB 或其他东西) - 那么您应该从那时开始寻找争用。

某些原因导致您的 PHP 会话无法完成其代码并挂起 - 专注于此,您就会找到答案。(此外 - 为这种情况设置优雅的错误页面 - 我认为 nginx 允许您这样做!)

答案2

我该怎么办?升级我的处理器?

显然不是——从您的统计数据来看,您的处理器空闲状态约为 75%,所以这很可能不是问题所在。

你查看过 IO 使用情况吗?我敢肯定,你的进程必须等待 IO,因此,所花的时间比正常情况下要长得多。

运行top并观察%waCPU 使用率行中的项目。以下是我的一台服务器的示例输出:

Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

如果该%wa值高于 20% 左右,那么很可能就是您的问题。

相关内容