Windows 7 php + Symfony2 非常慢
Posted
技术标签:
【中文标题】Windows 7 php + Symfony2 非常慢【英文标题】:Windows 7 php + Symfony2 terribly slow 【发布时间】:2012-04-08 22:28:53 【问题描述】:这是我长期以来一直遇到的问题。我想在我的 Windows 计算机上运行 php 应用程序,它的加载时间非常长,大约 10-25 秒。我尝试了很多东西:
首先我尝试了一个简单的 XAMPP 安装 我阅读 WAMP 可能会更快,所以我也尝试了 WAMP。它给了我同样的结果 然后我用PHP安装了一个nginx服务器,但也没有用 最后,我在 VirtualBox 中安装了 Ubuntu 11.10,并分享了包含我的项目的 windows 文件,但结果更糟:每次加载时间超过 22 秒。更新:我什至尝试过 APC - 它有所改进,但仍然是 6-8 秒/页
我将我的文件上传到一个 linux 服务器(共享主机),它在大约 300-500 毫秒内运行。在 XAMPP 安装中,我也尝试运行其他(即不是 Symfony2)应用程序(例如 phpmyadmin),它们也比在共享主机上慢,但不是非常慢,加载时间为 2-3 秒。在我改用 Linux 作为主要操作系统之前,我怎样才能提高性能?我有一台配备 i7 CPU、4 GB RAM、5400RPM HDD、Win7 x64 的笔记本电脑。
感谢您的帮助!
UPDATE2:出于某种神秘的原因,我的 Symfony 路由无法与 fcgid 一起使用(它给了我所有的 404 错误)所以我回去使用 PHP 作为一个模块。现在,它已经成为有史以来最糟糕的(比以前作为一个模块更糟糕):应用程序模式 20-25 秒,在开发模式下,每次超过 30 秒,所以我得到一个超时错误,它与 or 相同未启用 APC。
Here 你可以看到这个错误。这是可重现的:每次在 30 秒内到达不同的执行点:
【问题讨论】:
你改变了什么?如果 APC 提供了改进,那么您可能希望编辑您的帖子以反映这一点,并避免混淆:)
你是在开发模式还是在生产模式下测量 Symfony2 的性能?探查器说什么?
嗯。这个动作是空的吗? - 要检查原始性能,您应该只提供 hello world 字符串。我个人会坚持使用 fcgid。它很容易为我工作,但自从我在 Windows 上设置它已经有几年了。
@DavidFrank - 我已经没有什么可以建议的了,但是对于我认为是开发机器的东西来说,~600ms 并不算太糟糕。在 Windows 上开发并在 Linux 上部署是完全可能的(如果您得到 600 毫秒而不是 30 秒,那么“虚拟机中的 ubuntu 肯定不会更好”!)。
您找到解决方案了吗?我有一些问题。 PHP 在我的 Ubuntu 上运行良好,但在 Windows 上运行很慢。
【参考方案1】:
我曾经在 XP 和 Server 2003 上遇到过类似的 symfony 1 问题。解决方案是安装 PHP 加速器(对我们来说是 eAccelerator,现在 APC 可能是更好的选择)加上 FastCGI/fcgid。
附录:自从我在 Windows 上使用 Apache 已经很久了。我一般认为它的表现一直在稳步好转,而不是更糟;然而,与大多数不寻常的设置一样,不能保证良好的结果。根据我之前的评论,我建议您在 Apache Lounge 提出您的问题,我之前在那里收到了一些很棒的专家建议。
如果内存正常,他们可以为您提供免费的 Apache 二进制文件,该二进制文件使用比 Apache 网站上提供的标准工具更好的工具编译。
【讨论】:
我尝试过 APC 但没有帮助,并且使用 fastCGI 变得更慢。 我升级到 fcgid,但没有帮助 :( 我什至得到了一个 NTS 版本的 PHP 您是否确认它已实际安装?你应该有一个 Symfony 工具栏,让你知道它是否在工作(至少,symfony 1 有一个)。我还相信,如果您在命令行中列出模块,php 或 apache(我忘了哪个)应该显示 fcgid 已正确安装。 Symfony2 也有一个工具栏,是的,在我激活 APC 后,symfony2 显示了它。关于fcgid:在任务管理器里看到php-cgi.exe,虽然之前没看到。【参考方案2】:我的页面需要 20 秒才能执行。我安装了快速cgi,增加了内存限制,一切都不起作用。然后开始查看时间线,发现 symfony 防火墙模块占用了大部分时间。原来在我的教义配置中有“localhost”是导致问题的原因。将其更改为 127.0.0.1 解决了该问题。不知道为什么,但这里有描述:
http://12wiki.blogspot.ca/2012/11/why-does-symfony-2-firewall-take-so.html
【讨论】:
【参考方案3】:更新:
由于 PHP 5.5 现在集成了 PHP OPCache,这加快了执行时间。在我的设置中,一个完整的数据库访问请求现在需要 180 毫秒。
步骤:
-
更新到最新的php版本
启用 OPCache
禁用 xdebug
将 realpath_cache_size = 2M 设置为 DemonTPx 提到的
php.ini 设置:
realpath_cache_size = 2M
[XDebug]
xdebug.profiler_enable = 0
xdebug.remote_enable = 0
[opcache]
zend_extension = "C:\xampp18\php\ext\php_opcache.dll"
opcache.enable = 1
opcache.enable_cli = 0
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4000
为什么 Windows 比 Unix 慢?
正如here 所讨论的,PHP 在 file_exists 和 Windows 上的 filemtime() 中非常慢。因为 Symfony2 在开发模式下大量使用这些功能。在 Windows 上,我们不会低于 700 毫秒(在
解决方案可能是WinCache,它是由微软开发的,用于解决 IIS 上的这个问题。但由于它只适用于几个 Windows 版本,而且也只适用于 IIS,所以它对我来说不是解决方案。
替代方案
我可以推荐的一个不错的解决方案是在 Virtualbox 上安装一个 Linux 虚拟机。这很容易设置,也更像是生产环境。
【讨论】:
我使用这些设置从 10 秒降至 2.5 秒。禁用 xDebug 带来了显着的改进,同时将 realpath_cache_size 设置为 2M。 嗨,Jean,仍然 - 2.5 秒对于开发来说太慢了。您可以尝试 PHP5.5 中的 OPCache,它应该会更快。 这对我帮助很大!将加载时间从 ~500ms 降低到 ~50ms。谢谢!【参考方案4】:哇,在尝试了许多不同的事情之后,我终于成功地在 windows7 上使用 wamp 从 15 秒的执行时间转移到了 3 秒的执行时间。
如何安装 wincache 扩展: http://us2.php.net/manual/en/wincache.installation.php
在哪里下载 wincache dll: http://sourceforge.net/projects/wincache/
我的 php.ini 配置更改:
[PHP]
realpath_cache_size = 2M
extension=php_wincache.dll
; XDEBUG Extension
;zend_extension = "C:/Net Generation/wamp/bin/php/php5.5.12/zend_ext/php_xdebug-2.2.5-5.5-vc11.dll"
;
[xdebug]
xdebug.remote_enable = off
xdebug.profiler_enable = Off
xdebug.profiler_enable_trigger = off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir = "C:/Net Generation/wamp/tmp"
xdebug.show_local_vars=0
xdebug.max_nesting_level=200
[opcache]
zend_extension = "C:/Net Generation/wamp/bin/php/php5.5.12/ext/php_opcache.dll"
opcache.enable = 1
opcache.enable_cli = 0
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4000
【讨论】:
【参考方案5】:我也有同样的问题。在 php.ini 中设置以下内容将我的性能从 ~800ms 提高到 ~300ms:
php.ini:
realpath_cache_size = 2M
仍然不是我从 unix 机器获得的 ~100 毫秒,但至少会有所不同
【讨论】:
【参考方案6】:使用http://oca.microsoft.com/en/windiag.asp 检查您的计算机随机存取内存、RAM 或运行您的 Ubuntu CD 引导选项附带的内存测试应用程序。
在这两种情况下,选择所谓的额外或深度测试 - 我不记得确切 - 但是,选择更长时间的测试,这些测试没有结束,你只需等到测试完成两个阶段和任何您的 RAM 存在问题,通常会显示出来。
另外,请通过任何检查方式检查您的硬盘驱动器。之后尝试执行磁盘碎片整理
我咬了,你的问题是硬件相关的问题。
【讨论】:
【参考方案7】:只是一个猜测(可能不是正确的猜测),但它可能与 mysql 有关。看到你提到 PhpMyAdmin 和 Symfony 2 作为你测试的 PHP 应用程序,它们都依赖于 MySQL(假设你在 Symfony 2 中设置了 MySQL)。您在帖子中没有提到这一点,但是在您的 VirtualBox 设置中,您是否有机会让在 Ubuntu 上运行的脚本连接到 Windows 主机上的 MySQL 服务器?
您可以查看PHP Benchmark 以获取一些性能测试脚本,看看这些脚本在时间上是否表现更好。
您可以尝试的另一件事是使用Xdebug,看看您是否发现(一个)某些(一组)函数占用了太多时间。
我肯定会把这个问题保留为我的最爱,因为我很好奇现在想知道它是什么 :) 祝你好运!
【讨论】:
omg Wouter,非常感谢。我正在用类似的问题撞到墙上,你是绝对正确的 - 我的远程 MySQL 连接是瓶颈。【参考方案8】:页面加载时间也取决于 CSS + JS + 图片加载时间。我在 CakePHP 中遇到了同样的问题,并通过在 htaccess 中使用 mod_expires
解决了这个问题。
您是否尝试过在您的服务器 htaccess 文件中为 CSS、JS 和图像使用“ExpiresByType”?查看this页面。
【讨论】:
【参考方案9】:几年前我遇到了同样的问题。您在后台运行哪些防病毒软件? 尝试出于开发目的停用它或更改它。它也可能是一些在后台运行的索引服务。 Symfony 2 包含超过 15000 个与供应商的文件:) 也尝试通过从头开始重新安装 Windows 以经典方式进行操作。 我的网站通常需要 100-500 毫秒,我的笔记本电脑比你的慢。 (英特尔 C2D P8600)
【讨论】:
不,我没有防病毒软件。【参考方案10】:我认为您的缓存机制有问题。 检查 app\cache 目录。 必须有一个名为 dev 的文件夹。 如果它不存在或为空,请检查文件夹权限。 当我删除 app\cache 目录下的 dev 和 prod 目录时,加载页面需要 18 秒,但之后只需要 500 毫秒。
【讨论】:
我的缓存似乎运行良好,正如我所说,我不仅在 symfony 应用程序中遇到了这个问题。以上是关于Windows 7 php + Symfony2 非常慢的主要内容,如果未能解决你的问题,请参考以下文章
在哪里可以找到用于 Symfony2 应用程序的 [Xampp, Wampp] 的 php_apc 加速器运行速度更快?
CSRF 和 RESTful API (symfony2, php)
symfony2 重写规则 .htaccess app.php