2016-05-24 4 views
4

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

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

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

Slow Response Time

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

+0

Как насчет пропускной способности ввода-вывода? Нативный обработчик - это обработчик файлов. –

+0

Спасибо, что ответили. Не уверен, что я понимаю, о чем вы спрашиваете. Собственный обработчик сеанса хранит сеансы в локальных файлах? Таким образом, пропускная способность ввода-вывода для множества запросов уменьшается по сравнению с чем-то более быстрым? – CaptainStiggz

+0

По умолчанию сессии в PHP хранятся в файлах. Если вы испытываете ненормальное количество операций ввода-вывода на диске, где хранятся сеансы, это может привести к описанию поведения, которое вы описываете. Стоит проверить. –

ответ

1

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

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

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

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

Symfony API Documentation for Session:Save()

Here is the original stack overflow question (хотя 5 лет назад).

 Смежные вопросы

  • Нет связанных вопросов^_^