отдых — PHP Symfony Оптимизировать время выполнения контроллера

Я использую Symfony версии 3.1.9 для REST API, который взаимодействует с базой данных MySQL.

Среднее время, затрачиваемое на большинство API POST (функции контроллера), составляет ~ 3-4 секунды! Да ~ 3-4 секунды 🙁

Для одного из API, вот подробности из Symfony Profiler:

1-е исполнение показателей производительности API

13307 мс Общее время выполнения
485 мс инициализация Symfony
34,25 МБ Пиковое использование памяти

2-е последующее выполнение метрик производительности API

4862 мс Общее время выполнения
266 мс инициализация Symfony
34,00 МБ Пиковое использование памяти

Вот это снимок экрана 2-го времени выполнения, и кажется, что контроллер очень занят в некоторой тяжелой обработке, НО все, что я пытаюсь сделать в функции контроллера, — это получить доступ к информации из базы данных MySQl, и я подтвердил, что запросы MySql через Doctrine не принимаются более 1 мс.

Что я пробовал?

  • В случае всех запросов GET, где это применимо, я использую заголовки Cache-Control, как показано ниже:

    Cache-Control: must-revalidate=true
    Cache-Control: max-age=180
    

    Это не очень помогает, так как серверная машина Ubuntu (использующая Apache) перезагружается из-за времени загрузки и выполнения, а в случае API POST я все еще беспомощен.

  • Я также попытался включить OPcache на сервере Apache, но не уверен, что это помогает, поскольку я очень наивен в оптимизации сервера приложений и конфигурации сервера.

Пожалуйста помоги. Дайте мне знать в комментариях, если требуются какие-либо другие детали.

1

Решение

Вы можете использовать секундомер компонент, чтобы получить более точное время, сколько времени занимает внутри контроллера. Попытка точно профилировать приложение Symfony, работающее в среде ‘dev’, не имеет смысла — большая часть потенциальных ускорений, используемых в работе, устранена, а инструменты разработки, такие как профилировщик, отнимают много времени производить — а также строить весь контейнер.

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

Также просмотр вкладки Doctrine в профилировщике покажет, что и сколько запросов выполняется. Это также может быстро показать, где могут возникнуть проблемы — в основном из-за того, что было сделано гораздо больше звонков, чем вы могли подумать.

1

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

Других решений пока нет …