Это проблема, которую я начал экспериментировать несколько месяцев назад, и с тех пор я пытаюсь исправить неудачу.
Симптомы : в случайные интервалы времени 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 для хранения сеансов и все еще имел проблему. Я действительно не знаю, что попробовать дальше. Кто-нибудь еще испытал нечто подобное? На этом этапе любой намек был бы очень оценен.
Обновление: много месяцев поисков и бесчисленных проб и ошибок. Думаю, это может быть проблема параллелизма. На нашем сайте довольно много запросов AJAX, и я узнал, что это может привести к проблемам с сеансами, если в обработчике сеанса не будут задействованы надлежащие механизмы блокировки. Сначала я устранил symfony из уравнения, я установил его для использования php-сессий. В хранилище сеансов файлов по умолчанию я никогда не теряю сессий. Затем я настроил php для использования хранилища сеансов memcache. Конечно, мы начали видеть потерянные сеансы. Я на 100% уверен, что memcached не исчерпал память, я установил средство администрирования, и сервер memcached почти не использует 2% выделенного для него 8 ГБ (без потерь, память выделяется по мере необходимости). Затем я добавил второй сервер memcached и настроил обработчик сеанса для использования избыточности. Это очень помогло, у меня редко были потерянные сеансы. Пока это приемлемый компромисс.
По какой-то причине memcache, кажется, пропуская время от времени и создает новый сеанс, из-за которого пользователь выходит из системы.
Как было предложено Jestep, вы должны это доказать, извлекая memcache из уравнения, чтобы увидеть, не исчезла ли проблема.
Если это так, то проблема заключается в том, как вы разговариваете с memcache или memcache.
Фактически, настройка, которую мы использовали в течение последних нескольких месяцев, – это symfony, настроенная на использование обычных php-сессий (не для классов кэша), а затем php настроен на использование расширения memcache (есть еще один, называемый memcached), чтобы сохранить сеанс на 2 резервных серверах memcache. Если я вынимаю один из серверов memcache, мы сразу начинаем видеть потерянные сеансы.
Это была единственная настройка, которая действительно работала.