【问题标题】:Windows 7 php + Symfony2 terribly slowWindows 7 php + Symfony2 非常慢
【发布时间】: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 上运行很慢。

标签: php performance windows-7 apache2 page-load-time


【解决方案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 毫秒。

    步骤:

    1. 更新到最新的php版本
    2. 启用 OPCache
    3. 禁用 xdebug
    4. 将 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 应用程序中遇到了这个问题。
            猜你喜欢
            • 2011-03-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-07-11
            • 2016-11-19
            • 1970-01-01
            • 2023-03-03
            相关资源
            最近更新 更多