PHP окно в 4~5 раз медленнее в Windows, чем Linux
У меня есть сайт, развернутый как на Windows Server 2012, так и на Ubuntu 14.04, и существует значительная разница в производительности. База кода и данные БД в точности совпадают.
Среда Windows
- Windows Server 2012 в AWS EC2 t2.medium (двухъядерный 4 ГБ ОЗУ)
- PHP 5.5 64 битная тс
- Apache 2.4.23
Linux
- Ubuntu 14.04 в AWS EC2 t2.medium (двухъядерный 4 ГБ ОЗУ)
- PHP 5.5 64 битная тс
- Apache 2.4
На обоих сайтах включена поддержка OpCache.
Время выполнения (единственное время выполнения PHP, исключая весь сетевой трафик)
- Windows: 2.6-2.8s
- Linux: 200-400 мс
В Windows мы наблюдаем пиковую нагрузку на процессор почти на 100% и пиковую нагрузку ввода-вывода 3-4 МБ при загрузке одной страницы.
Я уже сталкивался с различным постом в Stackoverflow, касающимся производительности php в windows, но мы уже применили / протестировали предложение из этого поста, но ни в коем случае
- 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
Test1: запустить простой скрипт для цикла 1000 раз, чтобы вызвать is_dir()
- Windows: 217 мс
- Mac: 8 мс
Test2: профилируйте код с помощью xdebug и is_dir() в верхней части списка для максимального времени выполнения
Некоторые другие ссылки также указывают на ту же проблему https://github.com/facebook/hhvm/issues/4431
Надеюсь, что этот пост может помочь другим, сталкивающимся с той же проблемой