Windows 7 php + Symfony2 非常慢

问题描述 投票:0回答:5

这个问题困扰我很久了。我想在我的 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 秒,所以我得到一个超时错误,与或相同未启用 APC。

在这里您可以看到此错误。这是可重现的:每次它在 30 秒内到达不同的执行点:

php performance windows-7 apache2 page-load-time
5个回答
27
投票

更新:

由于 PHP 5.5 现在集成了 PHP OPCache,这加快了执行时间。在我的设置中,数据库访问的完整请求现在需要 180 毫秒。

步骤:

  1. 更新到最新的php版本
  2. 启用OPCache
  3. 禁用xdebug
  4. 按照 DemonTPx 提到的那样设置 realpath_cache_size = 2M

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 在 Windows 上的 file_exists 和 filemtime() 中非常慢。因为 Symfony2 在开发模式下经常使用这些函数。我们不会低于 700 毫秒(在 <= 5.4) on Windows. PHP 5.5 allows now 180ms.

解决方案可能是微软开发的WinCache来解决IIS上的这个问题。但由于它仅适用于多个 Windows 版本,并且仅适用于 IIS,因此这对我来说不是解决方案。

替代方案

我可以推荐的一个不错的解决方案是在 Virtualbox 上安装 Linux 虚拟机。这很容易设置,也更像生产环境。


20
投票

我也有同样的问题。在 php.ini 中设置以下内容将我的性能从约 800 毫秒提高到约 300 毫秒:

php.ini:

realpath_cache_size = 2M

仍然不是我从unix机器上得到的~100ms,但它至少有区别


9
投票

我在 XP 和 Server 2003 上使用 symfony 1 时也遇到过类似的问题。解决方案是安装一个 PHP 加速器(对我们来说是 eAccelerator,现在 APC 可能是更好的选择)加上 FastCGI/fcgid。

附录:我已经很久没有在 Windows 上使用 Apache 了。我总体上认为它的表现一直在稳步好转,而不是更差;然而,与大多数不寻常的设置一样,不能保证良好的结果。根据我之前的评论,我建议您在 Apache Lounge 提出问题,我之前在那里收到了一些很好的专家建议。

如果没记错的话,他们可以为您提供一个免费的 Apache 二进制文件,该二进制文件使用比 Apache 网站上提供的标准工具更好的工具编译。


3
投票

哇,在尝试了很多不同的事情之后,我终于成功地使用 wamp 在 windows7 上从 15 秒的执行时间变为 3 秒的执行时间。

如何安装 wincache 扩展: https://www.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

1
投票

我认为你的缓存机制有问题。 检查应用程序

© www.soinside.com 2019 - 2024. All rights reserved.