我有一个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