Symfony2慢速初始化时间

oro*_*edd 54 ubuntu performance virtualbox symfony

我在一个Ubuntu Server 12.04(64位)VM(VirtualBox)上运行Symfony2.主持人是MacBook专业版.出于某种原因,我在开发模式(app_dev.php)中获得了非常长的请求时间.我知道它在开发模式下速度较慢,但​​每个请求我说5-7秒(有时甚至更慢).在我的Mac上,我在开发模式下获得200ms左右的请求时间.

在Symfony2分析器中查看我的时间线后,我注意到~95%的请求时间是"初始化时间".这是什么?有什么原因可能会这么慢?

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

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

Den*_*app 124

默认情况下,我有来自Symfony2的5-30秒响应.现在它在开发环境中约为500毫秒.

然后我修改了以下内容php.ini:

  • 设置realpath_cache_size = 4M(或更多)
  • XDebug完全禁用(测试phpinfo)
  • realpath_cache_ttl = 7200
  • OPcache正确启用和设置(或APC)
  • 重新启动Apache以便重新加载php.ini

而且,在开发模式下,响应不到2秒!希望能帮助到你.

之前: 6779毫秒 在此输入图像描述

之后: 1587毫秒

在此输入图像描述

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

缓存元数据:

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

doctrine:
    orm:
        entity_managers:
            default:
                metadata_cache_driver: apc
                query_cache_driver: apc
                result_cache_driver: apc
Run Code Online (Sandbox Code Playgroud)

你需要为此启用APCu.它APC没有字节码缓存,就像OPCache操作码缓存一样.OPCache自PHP 5.5起内置.

---- 之后: 467 ms ----

(在prod环境中相同的响应是~80 ms)

在此输入图像描述

请注意,这个项目使用30多个捆绑包,并且拥有数万行代码,几乎有100个自己的服务,所以0.5s在本地Windows环境中使用一些简单的优化就相当不错.

  • 设置`realpath_cache_size = 4096k`对我们有用.谢谢! (13认同)
  • 如果您有最新的https://github.com/symfony/symfony-standard/blob/2.4/web/app_dev.php,我想这不是必需的.因为据我所知,行`$ loader = require_once __DIR__.'/../ app/bootstrap.php.cache'`包含来自所有这些数千个文件的类(这就是为什么我认为将realpath_cache_size从默认值更改为4096对我的情况没有影响) (2认同)

oro*_*edd 15

我找出了问题的原因(而不是Symfony2).由于某些原因,在ubuntu VM上,某些文件的修改时间不正确(即将来等).当symfony2使用filemtime()针对其注册表检查这些时间时,它确定缓存不再是新鲜的并且它重建整个事物.我还没弄清楚为什么会这样做.

  • Symfony2 dev会检查已更改的文件,并在需要时在每个请求上重建缓存.生产模式没有.这是两个环境之间(大部分)速度差异的来源. (7认同)