Это проблема, которую я начал экспериментировать несколько месяцев назад, и с тех пор пытаюсь исправить ее без успеха.
Симптомы. В произвольные интервалы времени 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 и настроил обработчик сеанса для использования избыточности. Это очень помогло, у меня редко были потерянные сеансы. Пока это приемлемый компромисс.