Я вижу очень странное поведение, исходящее от компонента менеджера сеансов Symfony2. В частности, функция SessionHandlerProxy :: read () иногда очень медленная в моей производственной среде.
Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy::read
Я использую Apache2 на Amazon EC2 под управлением Ubuntu, с хранилищем сеансов Symfony2 по умолчанию (не Redis или чем-то подобным), хотя мне интересно, должен ли я это делать. У меня установлен NewRelic для отслеживания моих транзакций, который сообщает следующее:
Медленные ответы являются прерывистыми, и я не заметил какой-либо заметной корреляции между запросами / мин и медленным временем чтения сеанса. Я в тупике, есть идеи, что я мог бы попробовать?
Я столкнулся с чем-то похожим на проект. Я идентифицировал это, когда мы переключились на redis для обработки сеанса (мы вернулись к стандартному обработчику файловой системы для PHP, проблема все еще возникает периодически).
Вероятно, происходит то, что метод SessionHandlerProxy :: read () заблокирован вне сеанса, и процесс ожидает разблокирования сеанса.
Блокировка сеанса хорошая вещь, как это мешает условия гонки в php. Так что, вероятно, происходит то, что другой запрос в настоящее время обращается к сеансу и не выпускает его так быстро, как может. Решение, которое я нашел через мой навыки гугл фу вызывает обработчик $ session-> save (), как только вы закончите сеанс, который вызывает intern session_write_close () (это разблокирует сеанс для следующего запроса).
Я надеюсь, что это поможет!
Документация по Symfony API для сессии: Save ()
Вот оригинальный вопрос переполнения стека (пусть и 5 лет назад).
Других решений пока нет …