在我重新启动进程之前,我的 PHP-CGI 无缘无故地开始提供空白页面。
我想知道为什么。
不幸的是,PHP 的“生产”配置文件默认没有 error_log。我的 Nginx 错误日志也没有显示与 PHP 相关的错误。这可能是一个绝望的案例,但我只是在问以防万一。
这是我的设置
- Nginx 0.8.2
- PHP 5.2.6-3ubuntu4.1 和 Suhosin-Patch 0.9.6.2 (cli) (build: Apr 23 2009 14:37:14)
- PHP APC 3.0.19-2
- spawn-fcgi v1.6.2 (ipv6) - 来自 lighttpd 的 fastcgi 包装器
任何想法可能导致错误?
更新
我想我已经隔离了这个问题。我一直在使用 Monit 在 PHP 开始空白时自动重新启动它。我的 PHP 错误日志是空白的。
但我发现如果我禁用了一个名为 WP-SuperCache 的 Wordpress 插件,我的 PHP 就会停止每 10 小时重置一次。到目前为止,我的 PHP 已经连续运行了 3 天。有人对此有什么建议吗?
Supercache 生成页面的完整缓存版本,以及执行一些其他内部缓存,在高负载情况下可能存在某种时间问题。我会检查您的缓存文件夹以确保它不包含空白文件。如果是这样,您可能有文件锁定问题。解决这样的问题可能很棘手,并且可能需要您打开错误票,因为这可能是代码本身的问题。
您是否尝试过实际停止 fcgi 服务并重新启动它而不是重新启动它。我在重新启动 fcgi 时发生了类似的奇怪事情
不是答案,而是建议 - 用php-fpm替换 spawn-fcgi它更可定制。
PS。也许你在 nginx.conf 中有特殊的 50x 错误页面重定向
UPD: 今天当 nginx+php 开始提供空白页面时,我遇到了类似的问题。我的研究表明,无论 php 抛出什么异常,它都会发送空白页。可能是某种 php.ini 指令提供空白而不是错误。我应该检查日志等... wip。
UPD2: 查看您的 php.ini,其中有 2 个参数需要更改才能查看 php 错误:
检查您的请求的响应状态是否再次发生(例如 curl -i)并且如果状态不是 200,请检查您的错误页面(特别是显示的错误编号的页面)并确保它们不是设置为以可能导致无限循环的方式重定向。
如果响应状态为 200,请检查响应中是否有除 HTTP 标头之外的任何文本。
这是一个常见问题,您可以做的最好的事情是每晚重新启动 spawn-fcgi 并查看错误日志。可以在此处找到一个将重新启动您的 php 的小型 python logwatch 程序。
http://hostingfu.com/article/keeping-your-php-fastcgi-processes-alive
“自发在一夜之间发生”条款听起来很有趣......您的主机是否有可能开始为所有流量添加额外的状态标头?如果是这样,您可能会看到此错误:
Joomla!php、FastCGI、空白页和重复的标题“状态”