Приложение Symfony2 очень медленное в VirtualBox

Я запускаю виртуальную копию Debian на VirtualBox для разработки приложения PHP большего размера в стеке nginx / php5-fpm / MySQL. Разработка происходит в ОС хоста (Windows 7 x64), код монтируется как общая папка в гостевой ОС.

Производительность очень плохая. Ниже перечислены выходы webgrind для встроенной файловой системы vbox и mount samba с cifs:

Профилирование vboxfssmbfs профилирование

В любом случае filemtime , file_exists и is_readable выполняются несколько секунд. Загрузка процессора очень высока, использование памяти кажется нормальным.

Является ли вывод всех трех этих функций кешированными в кеш-статусе? Почему они так долго?

Я бы очень признателен за любую помощь, которую я могу получить!

Изменить: Чтобы уточнить, производительность производительности прекрасна. На нашем (правильном, не виртуальном) промежуточном сервере PHP-код выполняется в режиме ~ 60 мс в производственных настройках и где-то между 100-200 мс в режиме dev.

Мне нужна помощь в выяснении причин, по которым VirtualBox работает на 100% медленнее в режиме dev & prod.

Я только что проверил, производственные настройки дают ~ 5 секунд исполнения. Все еще непригодным для использования, плюс с этим неудобно развиваться.

Используйте общий доступ к файлам nfs. Samba и доля файлов в vbox могут быть очень медленными.

Ваше профилирование указывает на то, что операции с файловой системой являются узким местом.

Прочтите этот пост в блоге http://clock.co.uk/tech-blogs/virtualbox-404-shared-folder-update для получения дополнительной информации

Недавно я ответил на аналогичный вопрос. Вы можете найти мой предыдущий ответ здесь .

Я сделаю небольшое резюме. Вы не должны оценивать эффективность вашего приложения, основываясь исключительно на переднем контроллере app_dev.php . Этот контроллер создан для использования только для разработки. В разработке вы делаете много изменений в конфигурационных файлах, шаблонах ветвей, активах и т. Д. Symfony проверит сотни файлов для модификаций и перезагрузит много ранее кэшированных материалов, если это необходимо, и, следовательно, большое количество вызовов filemtime , file_exists и is_readable . Все эти вызовы обходятся в режиме производства, потому что Symfony ожидает, что все в кэше будет обновлено. Таким образом, почти все возможное кэшируется в режиме производства и используется прямо вперед без проверки Symfony, если файл был изменен или нет. Это дает огромный прирост производительности, потому что перезагрузка отдельных файлов в разработке может занять много времени, чтобы проанализировать его, проверить на него зависимости, переписать все в зависимости от этих файлов и так далее.

Если вы сравниваете свое приложение, сравните его так, как если бы он был в режиме производства. По крайней мере, если вы не можете установить все аппаратные средства, как вы ожидаете, в процессе производства, выполните следующие действия. Очистите кеш для режима производства и используйте app.php вместо app_dev.php . Кроме того, проверьте раздел о производительности, который можно найти на symfony.com в документации. Здесь консоль призывает очистить и разогреть ваш кеш в рабочей среде. Я думаю, что cache:clear будет также прогревать кеш, но поскольку я не уверен на 100%, я предпочитаю делать оба вызова:

 php app/console cache:clear --env=prod --no-debug php app/console cache:warmup --env=prod --no-debug 

Надеюсь это поможет.

С уважением, Мэтт

Просто чтобы связать это:

В итоге я настроил общий ресурс samba на гостевой ОС, привязал его к второму сетевому адаптеру ( только для хоста, как в этом руководстве ) и смонтировал его как сетевой диск в ОС хоста.

Немного взломанный, но время выполнения составляет 100-500 мс с 5-13 сек в режиме dev с профилированием.

В дополнение к тому, что сказал Matt я рекомендую вам скомпилировать расширение твига и использовать его в качестве php-модуля. Он будет генерировать шаблоны быстрее. Но все же самое главное – делать какие-либо тесты, запускающие ваше приложение в среде prod, но не в dev или test. Убедитесь, что вы не загружаете модуль xdebug в производство, потому что он также замедлит ваши тесты.

Я не знаю ваших точных настроек, но, скорее всего, у вас будут лучшие результаты, если вы установите правильный обратный прокси (он же лак) вместо AppCache чтобы сделать как можно меньше запросов к самому приложению.

Имел ту же проблему, исправил ее, установив rsync cron, который синхронизирует код на виртуальной машине и хосте.

По-видимому, общие папки Virtualbox довольно медленны, когда дело доходит до чтения / записи файлов: /

Если вы заинтересованы в моем решении,