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

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

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

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

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

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

4

Решение

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

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

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

Я надеюсь, что это поможет!

Документация по Symfony API для сессии: Save ()

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

1

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

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

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