我目前正在设置一个 VPS(使用 VPS.NET),我将使用它来托管博客和其他一些东西。我已经安装了 nginx,并用 php-fpm 修补了 php (5.2.8)。
除了一个烦人的问题外,一切都很好(而且非常快!):因为该网站目前除了我的以外没有其他流量,一段时间后它一直处于空闲状态,所有 php-cgi 进程都死了。一旦我尝试访问该网站,nginx 就会返回一个不错的“502 bad gateway”,并且要修复,我必须手动重新启动 php-fpm 以使网站再次运行。这是为什么?我已经看到这在某种程度上是一个常见问题,但是在我的业余时间寻找解决方案几天后,我发现没有一个适合我。
有什么建议么?提前致谢
我正在运行一个非常相似的设置(nginx 0.7.61,php+fpm 5.2.10),我的 PHP 进程永远不会死,即使在空闲之后也是如此。
我的 php-fpm.conf 的进程控制位如下:
请注意,虽然我定义了类似 apache 的位(它们是默认配置的一部分),但它们没有被使用,因为我设置了 PM 样式静态。
您可以在全局选项部分中使用它来将日志调到调试级别:
看看是否有报道说它正在关闭工人。
如果这不起作用,一个闩锁修复方法是让像 pingdom 这样的服务每 x 分钟在您的网站上点击一个 php,但我对这个软件组合的经验并不表明这应该是必需的。
不确定 PHP-FPM 与 fastcgi 模式下的标准 PHP 有何不同,但通常每个 PHP 进程在终止之前只会处理有限数量的请求。这可以防止内存泄漏随着时间的推移而累积。这非常有效,除非您只有一个 PHP 进程,在这种情况下,它会一直运行,直到完成它的请求配额,然后退出。您应该查看是否有一个进程正在运行,或者是否有多个进程。如果你有几个,那么忽略这个。如果只有一个,则需要确保在启动 PHP 之前导出 PHP_FCGI_CHILDREN 环境变量。PHP_FCGI_MAX_REQUESTS 控制每个单独进程将运行的请求数。