Windows 7 php + Symfony2 非常慢

这是我长期以来一直遇到的一个问题。我想在我的Windows计算机上运行PHP应用程序,它的加载时间非常长,大约10-25秒。我尝试了很多事情:

  • 首先,我尝试了一个简单的XAMPP安装
  • 我读到WAMP可能更快,所以我也尝试了WAMP。它给了我同样的结果
  • 然后我用PHP安装了一个nginx服务器,但它也没有帮助。
  • 最后,我在VirtualBox中安装了Ubuntu 11.10,并共享了包含我的项目的Windows文件,但结果更糟:每次加载时间超过22秒。

更新:我甚至尝试过APC - 它改进了一点,但仍然6-8秒/页

我将我的文件上传到linux服务器(共享主机),它在大约300-500毫秒内运行。在XAMPP安装上,我试图运行其他(即不是Symfony2)应用程序(例如phpmmyadmin),这些应用程序也比共享主机上慢,但不是非常慢,加载时间为2-3秒。在我改用 Linux 作为主要操作系统之前,我该如何提高性能?我有一台带有i7 CPU,4 GB RAM,5400RPM HDD,Win7 x64的笔记本电脑。

感谢您的帮助!

更新2:由于某种神秘的原因,我的Symfony路由不适用于fcgid(它给了我一个404错误),所以我回去使用PHP作为模块。现在,它已经成为有史以来最糟糕的(比以前作为模块更糟糕):应用程序模式20-25秒,在开发模式下,每次超过30秒,所以我得到一个超时错误,无论是否启用APC都是一样的。

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

enter image description here


答案 1

更新:

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

步骤:

  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慢?

正如这里所讨论的,PHP在file_exists中非常慢,而在Windows上是filemtime()。由于Symfony2在开发模式下经常使用这些功能。我们不会在Windows上获得低于700ms(< = 5.4)。PHP 5.5 现在允许 180 毫秒。

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

另类

另外一个很好的解决方案是,在Virtualbox上有一个Linux虚拟机。这很容易设置,也更像是生产环境。


答案 2

我有完全相同的问题。在php中设置以下内容.ini将我的性能从~800ms提高到~300ms:

php.ini:

realpath_cache_size = 2M

仍然不是我从Unix机器获得的~100ms,但它至少会有所作为


推荐