Почему Symfony 2 ЧРЕЗВЫЧАЙНО медленно реагирует в моей среде?

У меня есть виртуальная машина VMware с Debian Squeeze. Все мои проекты находятся в папке на моем компьютере с Windows, доступной для виртуальной машины Debian через общую папку VMware. Это означает, что я могу работать над своими проектами, используя подходящий текстовый редактор на своем компьютере с Windows, одновременно размещая их в среде Linux. Я использовал эту настройку в течение нескольких месяцев, и у меня не было проблем с размещением сайтов Apache с PHP или другими задачами, связанными с разработкой, пока я не попробовал Symfony< /а>.

Теперь у меня есть один экземпляр готовой демо-версии Symfony 2 (Symfony_Standard_Vendors_2.2.1.tgz) в моем каталоге htdocs, а также один экземпляр на моем компьютере с Windows, общий для виртуальной машины. . Мой каталог htdocs выглядит так:

htdocs
|`- Symfony
 `- Symfony_shared -> /mnt/hgfs/Dropbox/Symfony

Symfony — это фактический физический каталог, находящийся в папке htdocs, а Symfony_shared — это программная ссылка на папку Dropbox на моем компьютере с Windows. Я должен повторить; Раньше у меня никогда не было проблем с производительностью при таком подходе.

Та же файловая система

Теперь, когда я захожу на http://devmachine.local/Symfony/web/app_dev.php в браузере и захожу в профайлер, вижу такие цифры:

Total time           83 ms
Initialization time  43 ms

Очень красивые цифры. Весь ответ был готов менее чем за 100 мс.

Связано

Но когда я захожу на http://devmachine.local/Symfony_shared/app_dev.php, я вижу совсем другое. цифры в профайлере:

Total time           6833 ms
Initialization time  4249 ms

Кто-нибудь может объяснить эти цифры? Что такое «Время инициализации» и почему оно занимает более 4 секунд? Имейте в виду, что это всего лишь демо-страница приветствия Symfony. Страница входа в моем реальном тестовом проекте имеет время инициализации 19 секунд, общее время составляет 22 секунды.

Я должен упомянуть, что я также провел быстрый тест, запустив php app/console в обоих каталогах. В папке Symfony эта команда вернула использование немедленно, в то время как в Symfony_shared потребовалось несколько секунд, прежде чем ответить.

Единственное изменение, которое я внес в папки Symfony, — это удаление части app_dev.php, которая ограничивает трафик до 127.0.0.1.


Я использую Apache 2.4.4 и PHP 5.4.14 на Debian 6.0.7 (сжать).

Вот скриншот профилировщика страницы приветствия Symfony_shared:

Скриншот профилировщика страницы приветствия Symfony_shared


person Hubro    schedule 18.04.2013    source источник
comment
И если вы нажмете config.php, вы не получите предупреждения?   -  person cheesemacfly    schedule 18.04.2013
comment
@cheesemacfly: Нет, только обычные рекомендации по отключению коротких открытых тегов и установке ускорителя PHP.   -  person Hubro    schedule 19.04.2013
comment
@cheesemacfly: Интересно, что страница конфигурации загружается одинаково быстро в обоих местах.   -  person Hubro    schedule 19.04.2013


Ответы (2)


Проверьте конфигурацию PHP на наличие open_basedir ограничений, препятствующих работе кэша статистики. Symfony делает МНОГО fstat() вызовов, и если они не кэшируются, Symfony работает очень медленно. Возможно, ваша символическая ссылка также препятствует работе кэша статистики. Если вы профилируете свое приложение (и включаете нативные функции PHP), будет довольно очевидно, что fstat() вызывает ваши проблемы.

Некоторая информация об этом есть в PHP Bug #49383.

person Ryan    schedule 19.04.2013
comment
В моем случае у меня есть и open_basedir = none, и safe_mode = off, но я не вижу улучшения производительности. APCu включен (подтверждено с помощью phpinfo), есть идеи, что еще может быть не так? - person ioleo; 27.08.2014
comment
Это через символическую ссылку? Это быстро локально? - person Ryan; 28.08.2014
comment
(1) Да. /var/www/my-project (корневой каталог в конфигурации nginx) — это символическая ссылка на реальный путь (2), пока он работает только локально — я пытаюсь ускорить свою среду разработки (сейчас я получаю 7–12 секунд в dev, что кажется слишком много) - person ioleo; 01.09.2014

Попробуйте установить для параметра realpath_cache_size в PHP.ini значение > 1000. Недавно было добавлено требование Symfony для решения этой проблемы: ://github.com/sensiolabs/SensioDistributionBundle/commit/cf0179711b24d84d4a29d71a4010540f4c990bd8

person Nanocom    schedule 18.12.2013