我有一个运行debian的网络服务器(nginx)和随机的php5-fpm似乎很糟糕,如果我调用php文件,它会回复504坏网关。
当它处于崩溃状态并且我执行sudo /etc/init.d/php5-fpm它表示它正在运行,但它仍然会给出504坏网关,直到我执行sudo /etc/init.d / PHP5-FPM
我认为它可能与我的一个php文件有关,这个文件处于无限循环中,直到某个事件发生(在mysql数据库中发生变化)或者直到它将被计时。我不知道一般来说这是好事还是我应该在超时发生之前让循环退出。
感谢您的建议!
答案 0 :(得分:0)
首先看看nginx error.log中的实际错误。我不认为PHP崩溃,只是你的循环正在使用所有可用的php-fpm进程,所以没有任何免费提供来自nginx的下一个请求。这应该会在日志中产生Timeout错误(nginx将等待一段时间用于可用的php-fpm进程)。
关于你的第二个问题。你不应该为此使用无限循环。如果你这样做,在循环中插入sleep()
命令 - 否则你将使用该循环和带有查询的数据库重载CPU。
此外,我想在该循环中有一个PHP进程等待事件就足够了。在这种情况下,使用某种类型的信号量(db中的文件或信息)让其他进程知道一个已经在等待该事件。否则你将总是吃掉所有可用的PHP进程。