PHP5性能对比,Windows和Linux

时间:2011-10-12 13:44:40

标签: php performance apc

我对Symfony2的性能有疑问。

我一直在Ubuntu 11.04下使用Symfony2开发几周,Apache 2.2.17,PHP 5.3.5,APC 3.1.9,没有xDebug

在开发环境中,Symfony2工具栏上给出的时间从未超过70毫秒。

今天,我尝试在Windows 7环境中安装我的应用程序:Wampserver 2.2,PHP 5.3.8,Apache 2.2.21,APC 3.1.7,no xDebug

Windows环境下的计算机比ubuntu(SSD,Quad core等)上的计算机要好得多。

当我在开发环境中运行应用程序时,工具栏始终指示最少300毫秒。

那么,你知道怎么可能吗?

谢谢!

编辑:找到关于主题的链接:http://fossplanet.com/f6/%5Bsymfony-users%5D-symfony2-slow-windows-xp-116465/

我也注意到了file_exists函数的问题(使用webgrind)。

那么,有什么想法吗?

也许这个主题已经讨论过,但我很惊讶没有发现任何相关内容。

4 个答案:

答案 0 :(得分:12)

<强> TL; DR;将realpath_cache_size设置为值&gt; 1000

编辑2:此PR解决了问题:尝试将PHP.ini的realpath_cache_size设置为值&gt; 1000 最近添加了symfony要求修复此问题:https://github.com/sensiolabs/SensioDistributionBundle/commit/cf0179711b24d84d4a29d71a4010540f4c990bd8

编辑:我刚看到这个答案:https://stackoverflow.com/a/17914570/980547 当我在php.ini(!)中设置realpath_cache_size = 4096k时,它在Windows上减少了4页的生成时间

旧回答:

所以,我用webgrind进行了比较:

在Windows(快速计算机)上,名为app_dev.php:

Web toolbar

因此,您可以看到Web工具栏显示764ms时间生成(由于xDebug和分析而增加,但仍然相关)。 Webgrind显示:

  • 651调用file_exists()的时间为232ms(这很多!)
  • 603次调用filemtime()(211ms)
  • 230次调用UniversalClassLoader-&gt; loadClass()(119ms)
  • 230次调用UniversalClassLoader-&gt; findFile()(38ms)

在linux(慢速计算机)上,app_dev.php:

Web toolbar

总生成时间298ms(比Windows上少两倍)。

  • 237次调用UniversalClassLoader-&gt; findFile()(36ms =&gt;少4次)
  • 237次调用UniversalClassLoader-&gt; loadClass()(20ms =&gt;少2次)
  • 623调用file_exists()(仅4ms !!!)
  • 605呼叫filemtime()(仅4ms !!!)

问题似乎是file_exists()和filemtime(),它们在Windows上比在Linux上慢得多。在Windows上,PHP正在寻找具有file_exists,filemtime,loadClass或findFile的文件,占60%。这是一个已知的问题吗?

编辑:所以问题仅适用于开发环境,在生产中没有文件存在完成,因为所有内容都被缓存。

答案 1 :(得分:6)

我刚刚开始使用Windows下的Symfony2进行开发,这对我来说是一个彻头彻尾的痛苦 - 我测试了xcache,apc和eaccelerator,它们与xdebug一起使用时几乎没有任何区别或者只是崩溃了。

现在我发现了微软的WinCache - 这让Windows下的Symfony2变得难以置信...... 我的请求需要1.5s到3s之间 - WinCache下降到 200ms 。它甚至不会打扰xdebug - 分析和调试仍然像魅力一样 编辑:这完全是关于开发环境。

唯一的缺点是它只运行在nts php上,我认为apache模块需要ts - 如果用fcgid运行它虽然你没有问题。

我不敢相信我这么多年没有这个怪物......

链接:
WinCache on php.net
Official WinCache site
Binaries

答案 2 :(得分:2)

有趣的发现了!

我想说因为这根本不是symfony2问题,所以必须在PHP二进制文件中修复它。

但是谁在Windows上运行他的网络服务器呢? :d

答案 3 :(得分:1)

尝试使用ApcUniversalClassLoader http://symfony.com/doc/2.0/book/performance.html