提问者:小点点

Symfony2缓慢的初始化时间


我在Ubuntu服务器12.04(64位)VM(VirtualBox)上运行Symfony2。主持人是一位MacBookPro。由于某些原因,我在开发模式(app_dev.php)中得到了很长的请求时间。我知道在开发模式下会慢一些,但我说的是每个请求5-7秒(有时甚至更慢)。在我的Mac电脑上,我在开发模式下的请求时间大约为200毫秒。

在Symfony2分析器中查看我的时间线后,我注意到约95%的请求时间是“初始化时间”。这是什么?是什么原因导致它如此缓慢?

此问题仅适用于开发模式下的Symfony2,不适用于我在VM上运行的任何其他站点,甚至不适用于生产模式下的Symfony2。

我看到了这个(http://stackoverflow.com/questions/11162429/whats-included-in-the-initialization-time-in-the-symfony2-web-profiler),但它似乎没有回答我的问题。


共3个答案

匿名用户

默认情况下,Symfony2会给我5-30秒的回复。现在在dev环境中约为500毫秒。

然后我在php中修改了以下内容。ini

  • 设置realpath\u cache\u size=4M(或更大)

瞧,在开发模式下,响应持续了2秒!希望能有帮助。

之后:1587毫秒

Symfony2从数千个文件中读取类,这是一个缓慢的过程。使用小型PHP realpath缓存时,如果文件路径不在PHP的realpath缓存中,则每次在开发环境中发出新请求时,都需要逐个解析文件路径。默认情况下,realpath缓存对于Symfony2太小。在prod中,这当然不是问题。

缓存元数据(例如映射)对于进一步提高性能也非常重要:

doctrine:
    orm:
        entity_managers:
            default:
                metadata_cache_driver: apc
                query_cache_driver: apc
                result_cache_driver: apc

您需要为此启用APCu。它是没有字节码缓存的APC,就像OPCache已经有了操作码缓存一样OPCache是自PHP5.5以来内置的。

(在prod环境中,相同的响应约为80毫秒)

请注意,这是一个使用30个捆绑包的项目,它有数万行代码,几乎有上百个自己的服务,因此0.5s在本地Windows环境中非常好,只需进行一些简单的优化。

匿名用户

我找出了问题的原因(而不是Symfony2)。由于某些原因,在ubuntu虚拟机上,某些文件的修改时间是不正确的(如将来等)。当symfony2使用filemtime()对其注册表检查这些时间时,它会确定缓存不再新鲜,并重建整个缓存。我还没弄明白它为什么要这么做。

匿名用户

我还需要禁用xdebug(v2.2.21)来调试macbook上的apache2最大超时加载。它是使用macports安装的:

sudo port install php54-xdebug.

启用xdebug后,每个页面都会耗尽最大加载时间,并会出现致命错误,超过发送的最大超时消息。禁用时,一切都只是在合理的预期时间内加载正常。我使用MAMP来实现这一点,默认情况下没有启用xdebug,apache2只是像往常一样快速工作。我可能会换另一个调试器,这是一个遗憾,因为xdebug以前工作得很好。

配置:

  • MacOSX 10.6.8
  • Macport 2.1.3
  • Apache 2.2.24
  • PHP 5.4