Windows 7 php + Symfony2 ужасно медленный - PullRequest
35 голосов
/ 24 марта 2012

Это проблема, с которой я долго сталкивался. Я хочу запускать приложения PHP на моем компьютере с Windows, и у него ужасно высокое время загрузки, около 10-25 секунд. Я перепробовал много вещей:

  • Сначала я попробовал простую установку XAMPP
  • Я прочитал, что WAMP может быть быстрее, поэтому я тоже попробовал WAMP. Это дало мне те же результаты
  • Затем я установил сервер nginx с PHP, но это тоже не помогло
  • Наконец, я установил Ubuntu 11.10 в VirtualBox и поделился файлами Windows, содержащими мой проект, но результат был еще хуже: время загрузки более 22 секунд каждый раз.

ОБНОВЛЕНИЕ : Я даже попробовал APC - он немного улучшился, но все равно 6-8 сек / стр.

Я загрузил свои файлы на сервер linux (общий хостинг), на котором он работает примерно за 300-500 мс. При установке XAMPP я пытался запускать и другие (не Symfony2) приложения (например, phpmyadmin), которые тоже были медленнее, чем на виртуальном хостинге, но не очень медленно, с временем загрузки 2-3 секунды. Пока я не перейду на Linux в качестве основной ОС, как я могу улучшить производительность? У меня есть ноутбук с процессором i7, 4 ГБ оперативной памяти, 5400 об / мин HDD, Win7 x64.

Спасибо за помощь!

UPDATE2: По какой-то таинственной причине моя маршрутизация Symfony не работала с fcgid (она выдала мне ошибку 404 для всего), поэтому я вернулся к использованию PHP в качестве модуля. Теперь он стал худшим за всю историю (хуже, чем когда-либо в качестве модуля): режим приложения 20-25 секунд, а в режиме разработки - более 30 секунд каждый раз, поэтому я получаю ошибку тайм-аута, и то же самое с или без APC.

Здесь вы можете увидеть эту ошибку. Это воспроизводимо: каждый раз, когда он достигает другой точки исполнения в течение 30 секунд:

enter image description here

Ответы [ 10 ]

25 голосов
/ 10 июня 2013

Обновление:

Поскольку в PHP 5.5 теперь встроен PHP OPCache, это ускоряет время выполнения.В моей настройке полный запрос с доступом к базе данных теперь занимает 180 мс.

Шаги:

  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 и filemtime () в Windows.Поскольку Symfony2 часто использует эти функции в режиме разработки.мы не получим меньше 700 мс (в <= 5.4) на Windows.PHP 5.5 теперь позволяет 180 мс. </p>

Решением может быть WinCache , разработанное Microsoft для решения этой проблемы на IIS.Но так как он работает только на нескольких версиях Windows, а также только с IIS, для меня это не решение.

Альтернатива

Также хорошее решение, которое я могу порекомендовать, - это иметьВиртуальная машина Linux на Virtualbox.Это легко настроить, а также больше похоже на производственную среду.

20 голосов
/ 23 июля 2013

У меня точно такая же проблема. Установка следующего в php.ini повысила производительность для меня с ~ 800 мс до ~ 300 мс:

php.ini:

realpath_cache_size = 2M

Все еще не ~ 100 мс, которые я получаю от Unix-машины, но это имеет значение, по крайней мере,

8 голосов
/ 24 марта 2012

У меня была похожая проблема с symfony 1 некоторое время на XP и Server 2003. Решением было установить PHP-ускоритель (для нас eAccelerator, в наши дни может быть лучше APC) плюс FastCGI / fcgid.

Приложение: прошло уже много лет с тех пор, как я использовал Apache в Windows.В целом я придерживался мнения, что его показатели неуклонно улучшаются, а не улучшаются;однако, как с большинством необычных установок, YMMV.Согласно моему предыдущему комментарию, я рекомендую задать ваш вопрос по адресу Apache Lounge , где я ранее получил несколько полезных советов экспертов.

Если память работает правильно, они могут предложить вам бесплатный двоичный файл Apacheскомпилирован с лучшими инструментами, чем стандартный, предлагаемый на веб-сайте Apache.

3 голосов
/ 27 января 2015

Ух ты, попробовав много разных вещей, мне наконец удалось перейти от времени выполнения 15 с к времени исполнения 3 с на windows7 с wamp.

Как установить расширение wincache: http://us2.php.net/manual/en/wincache.installation.php

Где скачать dll wincache: http://sourceforge.net/projects/wincache/

Изменение конфигурации моего php.ini:

[PHP]
realpath_cache_size = 2M
extension=php_wincache.dll
; XDEBUG Extension
;zend_extension = "C:/Net Generation/wamp/bin/php/php5.5.12/zend_ext/php_xdebug-2.2.5-5.5-vc11.dll"
;
[xdebug]
xdebug.remote_enable = off
xdebug.profiler_enable = Off
xdebug.profiler_enable_trigger = off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir = "C:/Net Generation/wamp/tmp"
xdebug.show_local_vars=0
xdebug.max_nesting_level=200

[opcache]
zend_extension = "C:/Net Generation/wamp/bin/php/php5.5.12/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
1 голос
/ 27 июля 2012

Просто предположение (и, вероятно, не правильное), но это может быть связано с MySQL. Видя, как вы упомянули PhpMyAdmin и Symfony 2 в качестве тестируемых PHP-приложений, оба полагаются на MySQL (при условии, что MySQL настроен в Symfony 2). Вы не упомянули об этом в своем посте, но в своей настройке VirtualBox вы случайно позволили скрипту, работающему в Ubuntu, подключиться к серверу MySQL на вашей хост-машине Windows?

Вы можете проверить PHP Benchmark на наличие некоторых скриптов тестирования производительности и посмотреть, работают ли эти скрипты лучше во времени.

Еще одна вещь, которую вы можете попробовать - использовать Xdebug и посмотреть, не найдете ли вы (а) определенные (группы) функций, которые занимают слишком много времени.

Я определенно собираюсь оставить этот вопрос в качестве фаворита, потому что мне слишком любопытно посмотреть, что это было сейчас :) удачи!

1 голос
/ 09 апреля 2012

Несколько лет назад у меня была такая же проблема. Какое антивирусное программное обеспечение вы запускаете в фоновом режиме? Попробуйте деактивировать его для целей разработки или изменить его. Это также могут быть некоторые службы индексирования, работающие в фоновом режиме. Symfony 2 состоит из> 15000 файлов с поставщиками :) Также попробуйте сделать это классическим способом, переустановив Windows с нуля. Мой сайт обычно занимает 100-500 мс, а мой ноутбук работает медленнее, чем ваш. (Intel C2D P8600)

1 голос
/ 03 апреля 2012

Я думаю, у вас проблема с механизмом кэширования.проверьте каталог app \ cache.должна быть папка с именем dev.если он не существует или если он пуст, проверьте права доступа к папке.когда я удаляю каталоги dev и prod из каталога app \ cache, загрузка страницы занимает 18 секунд, но после этого занимает всего 500 мс.

0 голосов
/ 17 мая 2015

На мои страницы уходило 20 секунд. Я установил быстрый cgi, увеличил лимит памяти, все, не работает. Затем начал просматривать временную шкалу и заметил, что модуль брандмауэра Symfony занимал большую часть времени. Оказывается, наличие "localhost" в моем конфиге для доктрины - вот что вызывало проблемы. Изменение на 127.0.0.1 решило проблему. Не знаю почему, но это описано здесь:

http://12wiki.blogspot.ca/2012/11/why-does-symfony-2-firewall-take-so.html

0 голосов
/ 28 июля 2012

Проверьте оперативную память компьютера, ОЗУ с помощью http://oca.microsoft.com/en/windiag.asp или запустите приложение тестирования памяти, поставляемое с опцией загрузки Ubuntu CD.

В обоих случаях выберите то, что называется дополнительным или глубоким тестом - я точно не помню, - однако, выбирайте тест с более продолжительным тестом такого рода, который не имеет конца, вы просто ждете, пока тест завершит два этапа и любой Проблемы с вашей оперативной памятью, как правило, проявляются.

Кроме того, проверьте ваш жесткий диск с любым средством проверки. после этого попробуйте выполнить дефрагментацию диска

Бит, ваша проблема связана с аппаратным обеспечением.

0 голосов
/ 24 июля 2012

Время загрузки страницы также зависит от времени загрузки CSS + JS + Image.У меня была та же проблема в CakePHP, и я решил ее, используя mod_expires в htaccess.

Вы пробовали "ExpiresByType" в файле htaccess вашего сервера для CSS, JS и изображений?Проверьте эту страницу.

...