Symfony2: прерывистое высокое время отклика / медленное завершение SessionHandlerProxy :: read ()

Я вижу очень странное поведение, исходящее из компонента менеджера сеансов Symfony2. В частности, функция SessionHandlerProxy :: read () в моей рабочей среде иногда очень медленная.

Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy::read

Я использую Apache2, на Amazon EC2, работающем под управлением Ubuntu, с хранилищем сеансов Symfony2 по умолчанию (не Redis, или с чем-то похожим), хотя мне интересно, должен ли я быть. У меня установлен NewRelic для отслеживания моих транзакций, которые сообщают следующее:

Медленное время отклика

Медленные реакции прерывисты, и я не заметил никакой заметной корреляции между запросами / мин и медленным временем чтения сеанса. Я в тупике, какие-то идеи, что я могу попробовать?

Я столкнулся с чем-то похожим на проект. Я определил его, когда мы переключились на redis для обработки сеанса (мы переключились на обработчик файловой системы по умолчанию для PHP, проблема все еще возникает с перерывами).

Скорее всего, метод SessionHandlerProxy :: read () заблокирован из сеанса, и процесс ожидает разблокировки сеанса.

Захват сеанса – это хорошо , поскольку он предотвращает условия гонки в php. Так что, вероятно, происходит то, что другой запрос в настоящее время обращается к сеансу и не освобождает его как можно скорее. Решение, найденное с помощью моих навыков google fu, вызывает обработчик $ session-> save (), как только вы закончите сеанс, который intern вызывает session_write_close () (это разблокирует сеанс для следующего запроса).

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

Документация API Symfony для сеанса: Сохранить ()

Вот исходный вопрос переполнения стека (хотя 5 лет назад).