3

我遇到了一个让我陷入死胡同的问题,所以我转向你!最近,一个 Symfony 应用程序出现故障,呈现内部 apache 错误 -500。删除 Symfony 缓存后,站点会恢复。经过进一步调查,我发现“脚本头过早结束:php5”的错误。该网站在 1 年多的时间里没有出现任何类似的错误,我们也没有对这个网站进行任何更改,而且这种情况经常发生(每周一次)。以下来自日志文件。

[Sat Aug 28 06:20:30 2010] [error] [client 206.131.184.1] Premature end of script headers: php5

这封电子邮件也是最近从 MT 发送的,可能与我认为可能与该问题直接相关。

我们注意到您的服务 ----.com 在托管您帐户的集群上生成了异常大量的文件系统锁。错误地使用 NFS 文件锁定的网站或脚本通常会生成此错误,这会严重影响其他客户的集群性能。这违反了我们的 AUP,可以在“ http://mediatemple.net/company/legal/aup_general.php ”找到。

我们将文件锁定问题跟踪到以下被重复锁定的文件:

/domains/----.com/symfony/cache/frontend/prod/config/routing/symfony.routing.configuration.cache /domains/----.com/symfony/cache/frontend/prod/config/routing /symfony.routing.data.cache

如果该选项可用(通常位于脚本的配置部分),我们建议您立即禁用脚本的文件锁定;或使用不使用文件锁定的其他脚本。此脚本未来的任何锁定滥用都可能导致此域的流量暂停,以防止锁定影响其他客户。

如果您对此文件锁定问题有任何疑问,或者不确定从何处开始禁用文件锁定,请回复此票证以获得进一步帮助。

4

3 回答 3

11

仅当您使用 Google Chrome 浏览并且抛出异常时才会发生这种情况。Monolog 有一些变化,他们启用了“chromephp”。

在您的 config_dev.yml 中:

monolog:
handlers:
    main:
        type:  stream
        path:  %kernel.logs_dir%/%kernel.environment%.log
        level: debug
    firephp:
        type:  firephp
        level: info
    chromephp:
        type:  chromephp
        level: info

删除整个 chromephp 块,一切都很好。

于 2013-06-20T09:04:32.677 回答
2

我认为禁用 Symfony 的缓存锁定以lib/cache/sfFileCache.class.php在方法中读取是安全的read()。Symfony 在阅读时使用共享锁。锁不是必需的,因为 Symfony 使用临时文件并在写入时重命名。此外,lib/log/sfFileLogger.class.php锁定doLog()方法不是必需的,因为写入是原子的(单次fwrite()调用),并且文件以附加模式打开。

我还没有测试过这些变化会如何影响 Symfony。

“脚本头过早结束”不是 PHP 错误消息。当后端(本例中为 PHP)不发送标头时,Web 服务器发出此消息。这很可能是因为它在它能够做任何事情之前就死了。您应该找到 PHP 错误日志并查看真正的错误消息。但是,请注意 Symfony@在函数调用中使用了很多用于错误抑制的方法,因此您可能找不到任何东西。

于 2010-08-29T08:27:26.707 回答
1

最近我遇到了类似的问题。用 APC 替换文件缓存完全解决了我的问题。我需要为 view_cache、i18n 缓存和路由替换 sfFileCache。

如果您的服务器上没有 APC,那么您可以轻松地使用任何其他流行的加速器。

如何在 symfony 中使用 APC:http ://www.zalas.eu/symfony-meets-apc-alternative-php-cache

于 2010-08-29T11:06:36.230 回答