
Профилирование Symfony в проде: разбор инцидента с деградацией
Приложение на Symfony 6.4 начало отдавать ответы по 3-4 секунды под нагрузкой при нормальном CPU. Разбираем, как искали причину без Web Profiler и что оказалось виновато.

Приложение на Symfony 6.4 начало отдавать ответы по 3-4 секунды под нагрузкой при нормальном CPU. Разбираем, как искали причину без Web Profiler и что оказалось виновато.

Профилировщик Symfony по умолчанию не работает в prod, а blackfire включают не всегда. Разбираем, где искать реальные тормоза без dev-профайлера и какие паттерны ловить на ревью.

Batch-скрипт на Doctrine ORM съедает гигабайты и падает с Allowed memory size exhausted на десятках тысяч сущностей. Разбираем, почему EntityManager держит всё в памяти и как это лечить.

Symfony-приложение отдаёт 502 на пиковой нагрузке, а локально всё летает. Разбираем, где реально уходит время под трафиком и чем профилировать прод без остановки сервиса.

Прогрев контейнера на деплое, тегированная инвалидация и dogpile под пиковым трафиком — где кеш Symfony 6.x/7.x подводит первым и как это ловить.

Прогрев кеша Symfony на деплое и инвалидация закешированных ответов — две разные задачи, которые часто путают. Разбираем, чем отличается cache:warmup от инвалидации через теги и где всё это ломается на проде.

Между входящим HTTP-запросом и ответом Symfony проходит через шесть событий HttpKernel. Разбираем, какое событие за что отвечает и где чаще всего ломается обработка запроса.

Serializer в контроллере, отсутствие версионирования, N+1 в API-эндпоинтах и стектрейсы наружу — разбор частых ошибок при разработке REST API на Symfony 7.x и способов их исправить.

Когда выделять функциональность в отдельный бандл, как правильно объявлять сервисы и конфигурацию, а где хватит обычной папки в src. Разбор на примере Symfony 6.4 и 7.x.

Как встроить кеширование в Symfony-приложение через компонент Cache: пул, теги, стемпид-защита. Разбираем, где очевидное решение даёт устаревшие данные и лишние промахи.

Три типа тестов в Symfony решают разные задачи и стоят разного времени выполнения. Разбираем, когда брать чистый unit, когда поднимать ядро через KernelTestCase, а когда гонять HTTP-запросы.

Консольная команда синхронизации каталога зависала на пятой минуте и падала по памяти на 200 тысячах товаров. Разбираем, где в Symfony Console ломается наивный подход и что с этим делать.