2010-08-29 84 views
3

我遇到了一个问题,让我陷入死胡同,所以我转向你!最近一个Symfony应用程序一直在渲染内部apache错误-500。删除Symfony缓存后,网站恢复正常。经过一些进一步的调查,我发现“脚本标题的提前结束:php5”的错误。这个网站在1年内没有出现过这样的错误,我们也没有对这个网站做任何改变,而且这种情况经常发生(每周一次)。以下是来自日志文件。脚本标题提前结束:php5 Symfony产生内部服务器错误500

[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

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

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

回答

1

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

如果APC在您的服务器上不可用,那么您可以轻松使用任何其他常用的加速器。

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

+0

感谢您对@kuba的见解,我刚刚实施并希望获得最好的服务。 – jeffreynolte 2010-09-02 01:12:19

+0

不要忘了写,如果它帮助或没有;) – 2010-09-02 16:05:34

+0

过了一段时间,该网站似乎工作得很好,这就做了伎俩。太感谢了!!对不起,我想确保网站已解决。 – jeffreynolte 2010-09-14 04:43:59

2

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

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

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

+0

谢谢,我希望这与@ kuba的信息一致,我们应该没问题。 – jeffreynolte 2010-09-02 01:12:59

+0

jmz +1为您提供帮助。我确实解决了这个问题,没有更多的文件锁定,但我不认为这是主要问题的根源。它肯定有助于解决问题的次要部分,但sFFileCache是​​罪魁祸首。再次感谢! – jeffreynolte 2010-09-14 04:46:16

10

它只如果您正在使用谷歌浏览器浏览,如果一个异常时发生。 在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块和万物的罚款。

+0

已解决问题:https://github.com/Seldaek/monolog/issues/206 – mYkon 2013-06-20 09:24:08

+0

这个答案与这个问题无关。这是一个symfony问题,而不是monolog - 考虑修改它。 – Raise 2013-06-20 21:45:54

+2

回答与此问题无关吗?你知道Symfony吗? Monolog是symfony自带的默认捆绑软件,当然,它是相关的! – mYkon 2014-03-04 09:18:14