ubuntu Symfony2初始化时间慢

nzrxty8p  于 2022-12-29  发布在  其他
关注(0)|答案(9)|浏览(134)

我在Ubuntu Server 12.04(64位)虚拟机(VirtualBox)上运行Symfony 2。主机是MacBook Pro。出于某种原因,我在开发模式下的请求时间很长(app_dev. php)。我知道在开发模式下请求时间很慢,但我说的是每个请求5-7秒(有时甚至更慢)。在我的Mac上,我在开发模式下的请求时间为200毫秒左右。
在查看了Symfony 2分析器中的时间线后,我注意到~95%的请求时间是“初始化时间”。这是什么?它可能如此缓慢的一些原因是什么?
这个问题只适用于开发模式下的Symfony 2,不适用于我在VM上运行的任何其他站点,甚至不适用于生产模式下的Symfony 2。
我看到了这个(http://stackoverflow.com/questions/11162429/whats-included-in-the-initialization-time-in-the-symfony 2-web-profiler),但它似乎没有回答我的问题。

h4cxqtbf

h4cxqtbf1#

默认情况下,Symfony 2的响应时间为5-30秒。**现在,在开发环境中,响应时间约为500毫秒。
然后我在php.ini中修改了以下内容:

*设置realpath_cache_size = 4M(或更多)

  • 完全禁用XDebug(使用phpinfo进行测试)
  • 实际路径缓存TTL=7200
  • 启用并正确设置OPcache(或APC)
  • 已重新启动Apache以便重新加载php.ini

瞧,响应在2秒内在开发模式!

**之前:**6779毫秒x1c 0d1x
**之后:**1587毫秒

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

缓存元数据:

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

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

为此,您需要启用APCuAPC没有字节码缓存,因为OPCache已经有了操作码缓存。OPCache自PHP 5.5起内置。

----**之后:**467毫秒----

(in生产环境相同的响应约为80 ms)

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

v64noz0r

v64noz0r2#

我找到了问题的原因(不是Symfony2)。由于某种原因,在ubuntu虚拟机上,某些文件的修改时间是不正确的(即在未来,等等)。当symfony2使用filemtime()检查注册表中的这些时间时,它确定该高速缓存不再新鲜,并重新构建整个缓存。我还不能弄清楚它为什么这样做。

tkclm6bt

tkclm6bt3#

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

sudo port install php54-xdebug.

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

  • Mac操作系统X 10.6.8
  • MAC端口2.1.3
  • Apache2.2.24
  • PHP 5.4
dwbf0jvd

dwbf0jvd4#

我们有同样的问题。这里我们有10秒和更多的时间来处理每个请求。我看看我是否可以删除bootstrap中的以下行。php。cache所有的时间都返回正常状态(298毫秒)。

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

有可能我们修改的时间不对,但是我们不知道如何修正。有人知道解决办法吗?

hgc7kmma

hgc7kmma5#

https://stackoverflow.com/a/12967229/6108843所述,这种行为的原因可能是Ubuntu VM设置。您应该在主机和客户操作系统之间同步日期和时间,如https://superuser.com/questions/463106/virtualbox-how-to-sync-host-and-guest-time所述。
当你通过FTP上传文件到虚拟机时,文件修改日期变成了主机的值。这就是为什么filemtime()返回错误的值。

mwg9r5ms

mwg9r5ms6#

您可以移动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;
}
a64a0gku

a64a0gku7#

我禁用了xdebug,它导致加载时间从17s(是的)减少到0.5s。

5lwkijsr

5lwkijsr8#

我在开发中也遇到过页面加载速度慢的问题,当你调整CSS或类似的东西时,这会非常令人沮丧。
经过一番挖掘,我发现对我来说,这个问题是由Assetic引起的,它在每次页面加载时都要重新编译所有资产:
http://symfony.com/doc/current/cookbook/assetic/asset_management.html#dumping-asset-files-in-the-dev-environment
通过禁用Assetic控制器,我可以大幅增加页面负载。然而,正如上面的链接所述,这是以每当您更改资产(或设置监视)时重新生成资产为代价的。

ecfsfe2w

ecfsfe2w9#

在app_dev中,所有的缓存和自动加载都是从零开始的,我发现dev中最慢的是orm。我避免使用orm,主要关注dbal,因为它,虽然我可能不应该。Orm在sf2中使用得相当多。我猜orm是dev中最慢的。看看你的dev配置和prod配置之间的区别。然而,对你的开发配置做一些调整可以使开发更快更愉快。2只要试着意识到你在做什么。3例如,关闭小枝控制器,然后修改大量的模板会让你很沮丧。4你需要不断清理你的缓存。5但是就像你提到的,它只用于开发,当它上线的时候,symfony会为你加速。

相关问题