Подтвердить что ты не робот

Сеансы Symfony 1.4 случайным образом потеряны

Это проблема, которую я начал экспериментировать несколько месяцев назад, и с тех пор пытаюсь исправить ее без успеха.

Симптомы. В произвольные интервалы времени symfony теряет информацию о сеансе и выводит пользователей. Кажется, что-то связано с загрузкой сайта. Когда загрузка выше, кажется, что пользователи чаще выходят из системы, могут случиться даже быстро, как 30 секунд.

Среда. С тех пор, как это началось, я изменил много настроек, включая версию php, веб-сервер, хранилище сеансов, версию Symfony. Вот текущая настройка: Ubuntu 10.04, php 5.4.0, Symfony 1.4.17, nginx 1.0.15 с FPM. Вот как настроено хранилище сеансов на фабриках .yml:

  user:
    class: myUser
    param:
      timeout:         86400
      use_flash:       true
  storage:
    class: sfCacheSessionStorage
    param:
      cache:
        class: sfMemcacheCache
        param:
          lifetime:  86400
          host:      192.168.1.3
          serializer:  IGBINARY
          mode:        compiled
          port:        11211

Я должен упомянуть, что я также использовал redis для хранения сеансов и все еще имел проблему. Я действительно не знаю, что попробовать дальше. Кто-нибудь еще испытал нечто подобное? На этом этапе любой намек был бы очень оценен.

Update: В течение нескольких месяцев поисков и бесчисленных проб и ошибок я думаю, что это может быть проблема concurrency. На нашем сайте довольно много запросов AJAX, и я узнал, что это может привести к проблемам с сеансами, если в обработчике сеанса не будут задействованы надлежащие механизмы блокировки. Сначала я устранил symfony из уравнения, я установил его для использования php-сессий. В хранилище сеансов файлов по умолчанию я никогда не теряю сессий. Затем я настроил php для использования хранилища сеансов memcache. Конечно, мы начали видеть потерянные сеансы. Я на 100% уверен, что memcached не исчерпал память, я установил средство администрирования, и сервер memcached почти не использует 2% выделенного для него 8 ГБ (без потерь, память выделяется по мере необходимости).  Затем я добавил второй сервер memcached и настроил обработчик сеанса для использования избыточности. Это очень помогло, у меня редко были потерянные сеансы. Пока это приемлемый компромисс.

4b9b3361

Ответ 1

На самом деле настройка, которую мы использовали в течение последних нескольких месяцев, - это symfony, настроенная на использование обычных php-сессий (не для классов кэша), а затем php настроена на использование расширения memcache (есть еще один memcached) для хранения сеанса на 2 резервных серверах memcache. Если я выберу один из серверов memcache, мы сразу начнем видеть потерянные сеансы.

Это была единственная настройка, которая действительно выполняла эту работу.

Ответ 2

По какой-то причине memcache, кажется, время от времени промахивается и создает новый сеанс, который заставляет пользователя выходить из системы.

Как было предложено Jestep, вы должны это доказать, извлекая memcache из уравнения, чтобы увидеть, не исчезла ли проблема.

Если это так, то проблема заключается в том, как вы разговариваете с memcache или memcache.