Медленное время отклика: Laravel 5.2 в контейнере Docker

Когда я запускаю Laravel 5.2 в док-контейнере PHP-7, я получаю время ответа в 300ms - 400ms,

Это очень медленно, хотя, если я просто повторяю phpinfo() на том же контейнере время отклика 15ms - 50ms кто-нибудь испытывает такое медленное время отклика с Laravel в контейнере Docker?

4

Решение

Хорошо, проблема решена.

В локальной среде разработки, использующей Docker 1.10 с драйвером VirtualBox и томом, смонтированным на хост-системе (например, Boot2Docker VM и OSX), производительность невероятно печальная, как описано выше. 300ms - 600ms,

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

Проблема не в Docker или Laravel, это проблема виртуальной машины VirtualBox.

ОБНОВИТЬ:

Сравнение разных сред в докере

Примечание: ниже без artisan optimize --force или же artisan config:cache

  • HHVM 13 мс — 31 мс (порт TCP 9000)
  • HHVM 12 мс — 22 мс (гнездо Unix)
  • PHP-7 FPM 42 мс — 73 мс (порт TCP 9000)
  • PHP-7 FPM 38 мс — 55 мс (сокет Unix)

HHVM with artisan optimisations + unix sockets: 8ms - 12ms


PHP-7 FPM с ремесленными оптимизациями + сокеты unix: 38 мс — 42 мс

Взгляните на HHVM с оптимизацией и сокетами Unix. Это очень быстро

4

Другие решения

Для всех, кто сталкивается с этим вопросом через Google, Docker для Mac теперь поддерживает пользовательское кэширование для объемов.

Разные приложения требуют разных уровней согласованности. Полный
согласованность иногда важна и остается по умолчанию. Тем не мение,
поддерживать случаи, когда временное несоответствие является приемлемой ценой
для повышения производительности в Docker 17.04 CE Edge включены новые
флаги для опции -v:

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

Включить режим кэширования для моего приложения Laravel было так же просто, как обновить ссылки на тома в docker-compose.yml.

До:

    volumes:
- ./:/var/www

После:

    volumes:
- ./:/var/www:cached

Сделав это изменение и воссоздав мои контейнеры, я вижу, что производительность намного больше соответствует ожидаемой от не виртуализированного локального сервера. Раньше простой запрос выполнялся за 1,3 с, а он упал до 0,35 с. Несмотря на предупреждение о том, что изменения хоста могут быть не сразу видны в контейнере, я пока не заметил каких-либо проблем с распространением.

Есть также продолжающаяся проблема GH о Производительность Docker Mac FS с некоторыми полезными заметками.

0

По вопросам рекламы [email protected]