Symfony2的慢初始化时间(Symfony2 Slow Initialization Time)

2019-06-18 13:26发布

我有一个Ubuntu服务器12.04(64位)VM(VirtualBox的)上运行Symfony2的。 主机是一台MacBook Pro的。 出于某种原因,我得到发展模式(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),但它似乎并没有回答我的问题。

Answer 1:

我有5-30秒的响应从Symfony2的默认。 现在,开发环境为500ms。

然后我修改了以下几件事在php.ini

  • realpath_cache_size = 4M (或更多)
  • 禁用XDebug完全(用测试phpinfo
  • realpath_cache_ttl = 7200
  • 启用并设定OPcache正确(或APC)
  • 为了有php.ini中重装上阵重新启动Apache的

瞧,响应下的开发模式下2秒去! 希望能帮助到你。

之前:6779毫秒

后:1587毫秒

Symfony2的从成千上万的文件中读取类,这是一个缓慢的过程。 当使用小PHP真实路径缓冲区,文件路径需要在每次如果他们不是在PHP的真实路径缓冲区的新请求在开发环境做时要逐一解决。 在真实路径缓冲区是默认的Symfony2太小。 在督促这当然不是一个问题。

高速缓存元数据:

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

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

您需要启用APCu这一点。 这是APC没有字节缓存,作为OPCache已经这样做了指令缓存。 OPCache因为PHP 5.5是内置的。

---- 后:467毫秒----

(在PROD环境相同的响应是〜80毫秒)

请注意,这是项目采用30个+束和具有的代码行,近百自己的服务数以万计的,所以0.5秒是只用一些简单的优化本地Windows环境相当不错。



Answer 2:

我想通了这个问题(和它不Symfony2的)的原因。 有关Ubuntu的VM某种原因,对某些文件的修改时间是不正确的(即在未来,等等)。 当Symfony2的使用filemtime()反对它的注册表检查这些时候,它确定缓存不再新鲜,它重建了整个事情。 我一直无法弄清楚它为什么这样做呢。



Answer 3:

我还需要禁用xdebug (v2.2.21)我的MacBook调试Apache2的最大超时负荷。 它是用MacPorts的安装:

sudo port install php54-xdebug.

启用了XDebug,办好每一页出最大的加载时间,致命错误超过最大分派超时消息。 禁用时,一切都只是加载在一个合理的预期时间的罚款。 我来到这个使用MAMP,没有默认启用了XDebug和Apache2的只是工作快像往常一样。 我可以为另一个调试改变,这是一个贝蒂,因为Xdebug的前工作的罚款。

配置:

  • MacOSX的10.6.8
  • MacPorts的2.1.3
  • 阿帕奇2.2.24
  • PHP 5.4


Answer 4:

我们有同样的问题。 下面我们就针对每一个要求有10个第二套及以上。 我看如果我删除按照bootstrap.php.cache线始终处于正常状态(298毫秒)返回。

foreach ($meta as $resource) { 
if (!$resource->isFresh($time)) {
return false;
}
}

这有可能是我们错了修改时间,但我们不知道如何解决。 有人知道解决办法?



Answer 5:

截至表示https://stackoverflow.com/a/12967229/6108843这种行为的原因可能是Ubuntu的虚拟机的设置。 你应该将主机和客户机操作系统在为解释之间同步日期和时间https://superuser.com/questions/463106/virtualbox-how-to-sync-host-and-guest-time 。

文件的修改日期更改主机的价值,当你通过FTP上传文件到虚拟机。 所以这就是为什么filemtime()返回错误值。



Answer 6:

您可以移动APP/var/cache в /dev/shm/YourAppName/var/cache 。 但它的好,在本地文件建造的集装箱也进行IDE自动完成和代码验证。 在app/AppKernel.php

public function getCacheDir()
{
    return $this->getVarOrShmDir('cache/' . $this->getEnvironment());
}

public function getLogDir()
{
    return $this->getVarOrShmDir('logs');
}

private function getVarOrShmDir($dir)
{
    $result = dirname(__DIR__) . '/var/' . $dir;

    if (
        in_array($this->environment, ['dev', 'test'], true) &&
        empty($_GET['warmup']) && // to force using real directory add ?warmup=1 to URL
        is_dir($result) && // first time create real directory, later use shm
        file_exists('/bin/mount') && shell_exec('mount | grep vboxsf') // only for VirtualBox
    ) {
        $result = '/dev/shm/' . 'YourAppName' . '/' . $dir . '/' . $this->getEnvironment();
    }

    return $result;
}


Answer 7:

我的XDebug禁用,它导致了减少加载时间从17S(是啊..)到0.5秒。



Answer 8:

我的问题,以及与页面加载缓慢的发展,它可以非常令人沮丧,当你调整CSS或类似的东西。

有点挖后,我发现,我的问题是由Assetic这是重新编译每个页面加载的所有资产造成的:

http://symfony.com/doc/current/cookbook/assetic/asset_management.html#dumping-asset-files-in-the-dev-environment

通过禁止使用Assetic控制器的我能大幅增加网页的加载。 然而,如上状态的链接,这是以再生资产的成本,只要你改变他们(或设置监视他们)。



Answer 9:

在app_dev,所有的缓存和自动加载从零开始,什么我发现在开发最慢的是ORM。 我使用ORM回避,并主要集中在,因为它DBAL,虽然我可能不应该。 奥姆使用相当多的SF2。 我的猜测是ORM是什么放慢你失望在开发中最。 看看你的开发配置和生产线配置之间的差异。 然而,一些调整你的dev的配置可以使开发更迅捷和愉快..只是尽量知道你做什么。 例如,关闭树枝控制器,然后修改了大量的模板将是一种令人沮丧的。 你需要不断清除缓存。 但是,像你提到的,它的开发和只有当它的时间去住,symfony会加快你。



文章来源: Symfony2 Slow Initialization Time