我有一个网站部署到 Windows Server 2012 和 Ubuntu 14.04,性能差异很大。代码库和数据库数据完全相同。
Windows 环境
- AWS EC2 t2.medium 中的 Windows Server 2012(双核 4GB 内存)
- PHP 5.5 64 位 ts
- Apache 2.4.23
Linux
- AWS EC2 t2.medium 中的 Ubuntu 14.04(双核 4GB 内存)
- PHP 5.5 64 位 ts
- Apache 2.4
两个站点都启用了 OpCache。
执行时间(单独 PHP 执行时间,不包括所有网络流量)
- Windows:2.6-2.8秒
- Linux:200-400毫秒
在 Windows 中,我们注意到单页加载时 CPU 负载峰值几乎达到 100%,IO 读取峰值为 3-4MB。
我已经在 Stackoverflow 上看到过关于 Windows 上 php 性能的各种帖子,但我们已经应用/测试了这些帖子中的建议,但毫无效果
- https://stackoverflow.com/questions/22845321/php-factor-30-performance-difference-from-linux-to-windows
- https://stackoverflow.com/questions/9854848/windows-7-php-symfony2-terribly-slow
任何意见,将不胜感激!
答案1
终于找到了这个问题的答案
性能差异是由于 php 函数 is_dir() 在 Window 中执行得很糟糕
测试 1:运行简单脚本循环 1000 次以调用 is_dir()
- Windows:217毫秒
- Mac:8毫秒
测试 2:使用 xdebug 分析代码,is_dir() 位居执行时间最长的列表顶部
其他一些参考资料也指出了同样的问题 https://github.com/facebook/hhvm/issues/4431
希望这篇文章可以帮助其他面临同样问题的人