Подтвердить что ты не робот

Windows 7 php + Symfony2 ужасно медленно

Это проблема, с которой я сталкивался в течение длительного времени. Я хочу запустить 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 ГБ оперативной памяти, 5400RPM HDD, Win7 x64.

Благодарим за помощь!

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

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

enter image description here

4b9b3361

Ответ 1

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

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

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

Ответ 2

Update:

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

Шаги:

  • Обновление до последней версии php
  • Включить OPCache
  • Отключить xdebug
  • Установите значение truepath_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 очень медленный в файлах_exists и filemtime() в Windows. так как Symfony2 много использует эти функции в режиме dev. мы не получим до 700 мс (в <= 5.4) в Windows. PHP 5.5 позволяет теперь 180 мс.

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

Alternative

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

Ответ 3

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

php.ini:

realpath_cache_size = 2M

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

Ответ 4

Вау, попробовав много разных вещей, мне, наконец, удалось перейти от 15-секундного времени выполнения к времени выполнения 3s на 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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

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

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

Ответ 8

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

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

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

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

Ответ 9

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

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

Ответ 10

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

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