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 ГБ оперативной памяти, жестким диском 5400 об / мин, Win7 x64.

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

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

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

войти  описание изображения здесь


person David Frank    schedule 24.03.2012    source источник
comment
Если APC не дал вам никаких улучшений, я подозреваю, что он был неправильно настроен. Я не думаю, что наличие ускорителя PHP не будет иметь никакого значения для любого приложения, даже если процессы PHP останутся в памяти через FastCGI. Предлагает ли APC веб-приложение для просмотра кэша кода операции? У нас было это для eAccelerator, что, я думаю, было бы полезно, если бы страницы не кэшировались.   -  person halfer    schedule 24.03.2012
comment
Теперь я собираюсь повторить попытку с APC и сообщить вам результаты.   -  person David Frank    schedule 24.03.2012
comment
Результаты: сейчас лучше, но все равно 6-8 сек/стр. Любая идея?   -  person David Frank    schedule 25.03.2012
comment
Что вы изменили? Если APC предлагает улучшение, вы можете отредактировать свой пост, чтобы отразить это, и избавить от путаницы :)   -  person halfer    schedule 25.03.2012
comment
Я представил две другие идеи по моему ответу ниже.   -  person halfer    schedule 25.03.2012
comment
Я включил расширение apc и изменил автозагрузку symfony2 следующим образом: symfony.com/doc/ current/book/performance.html   -  person David Frank    schedule 25.03.2012
comment
Вы измеряете производительность Symfony2 в режиме разработки или в режиме производства? Что говорит профайлер?   -  person Vladislav Rastrusny    schedule 25.03.2012
comment
Я вижу время загрузки в режиме разработки, но и в режиме производства оно не быстрее.   -  person David Frank    schedule 25.03.2012
comment
Хм ... сделайте скриншот профилировщика (особенно любых данных о времени) и вставьте его в свой вопрос.   -  person halfer    schedule 25.03.2012
comment
Я обновил вопрос, пожалуйста, посмотрите. Теперь еще хуже.   -  person David Frank    schedule 25.03.2012
comment
Хм. Это действие пусто? - чтобы проверить сырую производительность, вы должны просто обслуживать строку hello world. Лично я бы настаивал на fcgid. У меня это сработало довольно легко, но прошло несколько лет с тех пор, как я установил это в Windows.   -  person halfer    schedule 25.03.2012
comment
(Кроме того: если вы застряли, возьмите себе копию VirtualBox, установите ее на свой компьютер с Windows и установите внутри нее сервер LAMP. Это поможет вам довольно быстро начать работу)   -  person halfer    schedule 25.03.2012
comment
Как я писал выше, ubuntu в виртуалбоксе не лучше. Я сделал контрольный тест (источник: frankdavid.hu/files/benchmark.php.txt), он работает за 600-800 мс, в то время как на Linux-сервере он работает менее чем за 1 мс!   -  person David Frank    schedule 25.03.2012
comment
@DavidFrank - мне нечего предложить, но ~ 600 мс не так уж плохо для того, что я полагаю, является машиной для разработчиков. Вполне возможно разработать для Windows и развернуть в Linux (конечно, Ubuntu в виртуальном боксе не может быть лучше, если вы получаете 600 мс вместо 30 с!).   -  person halfer    schedule 25.03.2012
comment
Нет, вы, должно быть, неправильно меня поняли. 600 мс — это время выполнения тестового скрипта в Windows, а на хостинге Linux (удаленном компьютере) — менее 1 мс. Я не запускал тест на моем виртуальном боксе Ubuntu. Ubuntu запускает мой проект symfony2 за 20-25 секунд.   -  person David Frank    schedule 26.03.2012
comment
Вы установили и не запускали службу Adobe ColdFusion на одном компьютере?   -  person Seybsen    schedule 02.04.2012
comment
@DavidFrank - ну, я просто повторил то, что вы сказали: как я писал выше, Ubuntu в виртуальном боксе не лучше. Я сделал тест производительности... он работает за 600-800 мс, а на Linux-сервере - менее чем за 1 мс. Однако теперь я как следует запутался: Ubuntu запускает мой проект symfony2 за 20-25 секунд. Я думал, что это Windows, которая была очень медленной?   -  person halfer    schedule 02.04.2012
comment
Позвольте мне повторить мое предыдущее предложение: сделайте скриншот профилировщика (особенно любые данные о таймингах) и вставьте его в свой вопрос (с машины с таймингами 20-25 секунд).   -  person halfer    schedule 02.04.2012
comment
Теперь снова загружается через 10-15 секунд, но я не вижу никаких данных о таймингах в своем профилировщике, хотя я проверял все страницы несколько раз. В логе вижу только эти строки: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest". Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener::onEarlyKernelRequest".   -  person David Frank    schedule 03.04.2012
comment
Вы нашли решение? У меня есть проблема. PHP отлично работает в моей Ubuntu, но довольно медленно в Windows.   -  person nucleartux    schedule 21.07.2012
comment
Нет, я не. Даже php5.4 так медленно работает на моем ноутбуке.   -  person David Frank    schedule 21.07.2012
comment
@nucleartux — вставьте скриншот своего профиля времени в ссылку в комментариях, иначе нечего делать. Если вы уверенный отладчик, попробуйте изолировать часть Symfony2, вызывающую замедление. Просто догадываюсь - может быть вызов файловой системы, который не кэшируется в Windows?   -  person halfer    schedule 23.07.2012
comment
Мне все это надоело, и я удалил веб-сервер со своего компьютера. Может позже переустановлю, тогда скрины пришлю. Все, что я могу вам сказать, это то, что все идет медленно. Пробовал с разными проектами, разными версиями sf (2.0, 2.1), разными версиями php (5.3.* TS, NTS, 5.4), тормозил в консоли (запуск команд sf) и в браузере тоже. Так что мне кажется, что это общая проблема. Редактировать: я только что заметил, что ваше сообщение было адресовано не мне, что бы там ни было...   -  person David Frank    schedule 23.07.2012
comment
У меня та же проблема: время загрузки проекта symfony2 составляет от 8 до 15 секунд на wamp-окнах и менее 500 мс на моем удаленном сервере под управлением Ubuntu (очень простое решение за 2 евро в месяц). Я пробовал много изменений конфигурации php безрезультатно...   -  person Sébastien    schedule 27.01.2015


Ответы (10)


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

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

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

person halfer    schedule 24.03.2012
comment
Я пробовал APC, но не помогло, а с fastCGI стало еще медленнее. - person David Frank; 24.03.2012
comment
Я обновился до fcgid, но не помогло :( У меня даже была НТС версия PHP - person David Frank; 25.03.2012
comment
Вы убедились, что он был действительно установлен? У вас должна быть панель инструментов Symfony, которая позволяет узнать, работает ли она (по крайней мере, в Symfony 1 она была). Я также считаю, что либо php, либо apache (я забыл, что именно) должны показать, что fcgid установлен правильно, если вы перечисляете модули в командной строке. - person halfer; 25.03.2012
comment
У Symfony2 тоже есть панель инструментов, и да, после того, как я активировал APC, symfony2 показал ее. По поводу fcgid: в диспетчере задач вижу php-cgi.exe, хотя раньше не видел. - person David Frank; 25.03.2012

Обновление:

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

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

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

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

person Simon Fakir    schedule 10.06.2013
comment
Я упал с 10 с до 2,5 с с этими настройками. Отключение xDebug дало заметное улучшение, а также установка realpath_cache_size на 2M. - person Jean; 12.04.2014
comment
Привет, Жан, все же - 2,5 секунды слишком медленные для разработки. Вы можете попробовать OPCache в PHP5.5, который должен работать быстрее. - person Simon Fakir; 22.04.2014
comment
Это мне очень помогло! Уменьшено время загрузки с ~ 500 мс до ~ 50 мс. Спасибо! - person Krzysztof Trzos; 25.01.2016

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

php.ini:

realpath_cache_size = 2M

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

person Bert Hekman    schedule 23.07.2013

Ух ты, перепробовав много разных вещей, мне наконец удалось перейти от времени выполнения 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
person Sébastien    schedule 27.01.2015

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

person Ekrem    schedule 03.04.2012
comment
У меня кеширование работает отлично, и, как я уже сказал, у меня проблема не только с приложениями Symfony. - person David Frank; 03.04.2012

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

person Vincent    schedule 09.04.2012
comment
Нет, у меня нет антивируса. - person David Frank; 10.04.2012

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

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

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

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

person Wouter    schedule 27.07.2012
comment
омг Воутер, большое спасибо. Я бился головой о стену с похожей проблемой, и вы абсолютно правы - мое удаленное соединение с MySQL было узким местом. - person Leng; 06.07.2014

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

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

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

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

person Community    schedule 28.07.2012

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

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

person Alex    schedule 17.05.2015

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

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

person Kumar    schedule 24.07.2012