PHP5 性能比较,Windows 和 Linux

发布于 2024-12-09 08:12:43 字数 696 浏览 0 评论 0原文

我有一个关于 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,无xDebug

windows环境下的计算机比ubuntu上的计算机好得多(SSD、四核等)。

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

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

谢谢 !

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

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

那么,有什么想法吗?

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

I have a question about Symfony2 performance.

I have been developing with Symfony2 under Ubuntu 11.04 for a few weeks now, Apache 2.2.17, PHP 5.3.5, APC 3.1.9, no xDebug

On the dev environment, the time given on the Symfony2 toolbar was never above 70 ms.

Today, I've tried to install my app on a Windows 7 environment : Wampserver 2.2, PHP 5.3.8, Apache 2.2.21, APC 3.1.7, no xDebug

The computer on the windows environment is much better than the one on ubuntu (SSD, Quad core, etc).

And when I run the application on the dev environment, the toolbar indicates always a minimum of 300 ms.

So, do you know how it is possible ?

Thanks !

EDIT : found a link about the subject : http://fossplanet.com/f6/%5Bsymfony-users%5D-symfony2-slow-windows-xp-116465/

I noticed the problem with the file_exists function too (using webgrind).

So, any ideas ?

Maybe the subject has already been discussed, but I was surprised not to find anything related.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

逐鹿 2024-12-16 08:12:43

TL;博士;将 realpath_cache_size 设置为值 > 1000

编辑2:此 PR 中解决的问题:尝试将 PHP.ini 的 realpath_cache_size 设置为一个值 > 1000 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工具栏

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

  • 651 次调用 file_exists(),持续 232 毫秒(这是很多!)
  • 603 次调用 filemtime()(211 毫秒)
  • 230 次调用 UniversalClassLoader->loadClass()(119 毫秒)
  • 230 次调用 UniversalClassLoader-> loadClass(119 毫秒)。 findFile() (38ms)

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

Web 工具栏

总生成时间为 298 毫秒(比 Windows 少两倍多)。

  • 237 次调用 UniversalClassLoader->findFile()(36ms => 4 倍)
  • 237 次调用 UniversalClassLoader->loadClass()(20ms => 2 次)
  • 623 次调用 file_exists()(仅 4ms! )
  • 605 调用 filemtime() (仅 4 毫秒!!!)

问题似乎是 file_exists() 和filemtime(),在 Windows 上比在 Linux 上慢得多。在 Windows 上,PHP 60% 的时间都在查找带有 file_exists、filemtime、loadClass 或 findFile 的文件。这是一个已知问题吗?

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

TL;DR; Set realpath_cache_size to a value > 1000

Edit 2: Problem solved in this PR: Try to set PHP.ini's realpath_cache_size to a value > 1000
A symfony requirement was recently added fixing this issue: https://github.com/sensiolabs/SensioDistributionBundle/commit/cf0179711b24d84d4a29d71a4010540f4c990bd8

Edit: I just saw this answer: https://stackoverflow.com/a/17914570/980547
And it decreased page generation time by 4 on windows when I set realpath_cache_size=4096k in my php.ini (!)

Old answer:

So, I did a comparison between both with webgrind:

On windows (fast computer), called app_dev.php:

Web toolbar

So you can see that the web toolbar shows a 764ms time generation (increased because of xDebug and profiling, but still relevant).
Webgrind shows:

  • 651 calls to file_exists() for a time of 232ms (which is a lot!)
  • 603 calls to filemtime() (211ms)
  • 230 calls to UniversalClassLoader->loadClass() (119ms)
  • 230 calls to UniversalClassLoader->findFile() (38ms)

On linux (slow computer), app_dev.php:

Web toolbar

298ms of total generation time (which is more than twice less than on windows).

  • 237 calls to UniversalClassLoader->findFile() (36ms => 4 times less)
  • 237 calls to UniversalClassLoader->loadClass() (20ms => 2 times less)
  • 623 calls to file_exists() (4ms only !!!)
  • 605 callsd to filemtime() (4ms only !!!)

The problem seems to be file_exists() and filemtime(), which are much slower on windows than on Linux. On windows, PHP is looking for files with file_exists, filemtime, loadClass or findFile for 60% of the time. Is that a known problem ?

Edit : so the problem is only for the dev environment, in production no file_exists are done since everything is cached.

难如初 2024-12-16 08:12:43

我刚刚开始在 Windows 下使用 Symfony2 进行开发,这真是太痛苦了 - 我测试了 xcache、apc 和 eaccelerator,它们在与 xdebug 一起使用时几乎没有任何区别或只是崩溃。

现在我发现了 Microsoft 的 WinCache - 这使得 Windows 下的 Symfony2 速度快得令人难以置信......
我的请求花费了 1.5 秒到 3 秒的时间 - 使用 WinCache 将其降至200 毫秒。它甚至不会打扰 xdebug - 分析和调试仍然像魅力一样工作。
编辑:这都是关于开发环境的。

唯一的缺点是它只能在 nts php 上运行,我认为 apache 模块需要 ts - 如果你使用 fcgid 运行它,那么你不会有任何问题。

我不敢相信我在没有这个怪物的情况下工作了这么多年......

链接:
php.net 上的 WinCache
WinCache 官方网站
二进制文件

I just started developing with Symfony2 under Windows and this was a total pain in the ass - I tested xcache, apc and eaccelerator which either made nearly no difference or just crashed when used together with xdebug.

Now I discovered WinCache by Microsoft - which made Symfony2 under Windows unbelievable fast...
My requests took something between 1.5s to 3s - with WinCache its down to 200ms. And it doesn't even bother xdebug - profiling and debugging still works like a charm.
Edit: This is all about the dev environment.

The only downside is that it only runs on nts php and I think the apache modules requires ts - if you run it with fcgid though you will have no problems.

I can't believe I worked so many years without this monster...

Links:
WinCache on php.net
Official WinCache site
Binaries

剧终人散尽 2024-12-16 08:12:43

有趣的发现!

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

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

Interesting found!

I would say since this is not a symfony2 issue at all, it has to be fixed in PHP binary..

But who runs his webserver on windows, anyway? :D

末骤雨初歇 2024-12-16 08:12:43

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

Make a try with ApcUniversalClassLoader
http://symfony.com/doc/2.0/book/performance.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文