2012-05-06 11 views
11

Este es un problema que comencé a experimentar hace unos meses y he intentado solucionarlo sin éxito desde entonces.sesiones de Symfony 1.4 perdidas al azar

Síntomas: En intervalos de tiempo aleatorios, Symfony pierde la información de la sesión y cierra la sesión de los usuarios. Parece de alguna manera estar conectado con la carga del sitio. Cuando la carga es más alta, parece que los usuarios cierran la sesión con más frecuencia, incluso a los 30 segundos.

Entorno: Desde que esto comenzó, he cambiado mucho la configuración, incluida la versión de php, el servidor web, el almacenamiento de sesiones, la versión de Symfony. Aquí está la configuración actual: Ubuntu 10.04, php 5.4.0, Symfony 1.4.17, nginx 1.0.15 con FPM. Así es como el almacenamiento de sesión se configura en factories.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 

tengo que mencionar que también he utilizado para el almacenamiento Redis sesión y todavía tenía el problema. Realmente no tengo idea de qué probar a continuación. ¿Alguien más experimentó algo similar? En esta etapa, cualquier pista sería muy apreciada.

Actualización: Después de meses de búsquedas y un sinnúmero de pruebas y errores, creo que podría ser un problema de simultaneidad. Nuestro sitio es bastante pesado en las solicitudes de AJAX y he aprendido que puede provocar problemas con las sesiones a menos que se implementen mecanismos de bloqueo adecuados en el controlador de sesión. Primero eliminé Symfony de la ecuación, lo configuré para usar sesiones php. Con el almacenamiento predeterminado de la sesión de archivos, nunca pierdo ninguna sesión. Luego configuré php para usar el almacenamiento de la sesión de Memcache. Sin duda, hemos comenzado a ver sesiones perdidas. Estoy 100% seguro de que memcached no se está quedando sin memoria, he instalado una herramienta de administración y el servidor memcached apenas usa el 2% de los 8GB asignados (sin desperdicio, la memoria se asigna según sea necesario). Luego he agregado un segundo servidor memcached y configuré el controlador de sesión para utilizar la redundancia. Esto ayudó mucho, rara vez perdí sesiones. Por ahora este es un compromiso aceptable.

+0

¿Está utilizando Memcache como mecanismo de almacenamiento de sesión? Si es así, me imagino que Memcache está tirando una sesión mientras que viene una nueva - el almacenamiento de Memcache no está garantizado, por diseño. Aumente la memoria disponible para Memcache, o mejor aún, use otro mecanismo de persistencia. – halfer

+0

Como mencioné, usé otros motores de almacenamiento de sesión, como redis, que no descarta datos. Además, nunca he visto Memcache para usar más de 1GB, aunque está configurado para usar hasta 8GB. – dcb

+0

Ah, puede haberme perdido eso, a menos que ese detalle se haya agregado en una edición posterior.¿Se está probando el comportamiento exhibido en un servidor de desarrollo, quizás usando 'ab'? ¿Necesitas PHP 5.4? De lo contrario, retroceda a 5.3.x, o incluso a 5.2.x, y vea si eso hace la diferencia. – halfer

Respuesta

0

En realidad, la configuración que hemos estado utilizando durante los últimos meses está configurada para usar las sesiones php normales (no ninguna de las clases de caché) y luego php está configurado para usar la extensión memcache (hay otra llamada memcached) para almacenar la sesión en 2 servidores memcache redundantes. Si elimino uno de los servidores de Memcache inmediatamente comenzamos a ver sesiones perdidas.

Esta fue la única configuración que realmente hizo el trabajo.

1

Por alguna razón, Memcache parece perderse de vez en cuando y crear una nueva sesión que hace que el usuario se cerrará la sesión.

Como sugiere Jestep, usted debe probar esto tomando Memcache fuera de la ecuación para ver si el problema desaparece.

Si es así, entonces el problema es o bien la forma en la que está hablando memcache o Memcache sí.

+0

Por lo tanto, he cambiado al almacenamiento de archivos y no tengo ningún problema. – dcb

Cuestiones relacionadas