2009-06-06 20 views
11

Estamos ejecutando el servidor de aplicaciones tomcat que maneja más de 100 sesiones simultáneas. En los últimos 2 meses, los usuarios más activos notaron que a veces se los retira del sistema.Las sesiones de Tomcat caducan inesperadamente

Como entendí del registro, las sesiones de tomcat están expiradas sin ningún motivo.

No veo problemas desde el lado de la aplicación web. ¿Hay algún problema del lado de Tomcat?

Tomcat 6.0.18.

+2

¿Cuál fue tu causa? –

Respuesta

8

Si no ha habido ninguna posibilidad código de activación de esto, yo miro uso de memoria. Este podría ser el efecto de Tomcat quedando sin memoria e invalidando sesiones para recuperar.

Si es posible, controle las recolecciones de basura y/o supervise con jconsole o jvisualvm.

2

hay un tiempo de espera, que se puede configurar en su web.xml:

<web-app> 
    ... 
    <session-config> 
    <session-timeout>-1</session-timeout> 
    </session-config> 
</web-app> 

uso -1 para ningún tiempo de espera

+1

El problema no está allí. El tiempo de espera actual se establece en una hora. Pero los usuarios reciben una patada mientras usan activamente la aplicación –

-1

A pesar de que no conozco la causa del problema, una posible solución (que había hecho en mi proyecto anterior) sería ejecutar la aplicación en un clúster de tomcat y tener una conmutación por error de sesión. Las sesiones se pueden pegar por defecto y cuando un nodo se cae, los nodos saludables recogen las sesiones y todo esto es transparente para el usuario final.

+3

Parece que la agrupación en clúster es más probable que cause problemas con las sesiones que solucionarlas. – erickson

2

Aumente su registro de sesiones, lo que puede arrojar algo de luz sobre su problema.

La página de configuración de Tomcat Logging in Tomcat incluye un ejemplo de aumento de registro de sesiones.

0

Puede buscar la base de datos de errores de Tomcat, pero sería mejor tener otra vista de su aplicación web primero. Las posibilidades de que algo esté mal con Tomcat son muy bajas.

Intenta investigar qué causa la invalidación de la sesión. ¿Estás usando filtros? ¿Tiene solicitudes de contexto cruzado? Intente agregar información de registro para cada solicitud para averiguar cuándo se pierde exactamente la sesión.

4

Aumentaría la supervisión del servidor en general y las sesiones específicamente.

Una buena aplicación de supervisión es lambda probe - le permite ver las sesiones actuales y sus datos. También agregaría un HttpSessionListener para registrar la creación y destrucción de la sesión.

Editar

IS es posible que agregue algunos objetos no serializble a la sesión y Tomcat falla para pasivar en el disco?

Editar 2

sonda lambda parece estar muerto, y hay una mejor tenedor del proyecto durante al http://code.google.com/p/psi-probe/

7

Una posible causa es que se pone en la sesión de un objeto que no se implementar la interfaz Serializable. Tomcat ocasionalmente escribe algunas de las sesiones en el disco. Si una sesión contiene objetos no serializables, simplemente se eliminará del contenedor (debido a la excepción NotSerializableException). Si esto sucede, debería ver la Excepción en el archivo de registro de Tomcat.

+0

¿En qué casos tomcat escribe sesiones en el disco? en un entorno basado en clústeres o cuando se está quedando sin memoria? –

2

solo nos encontramos con este 6_0_18 con Tomcat 1.5 e IBM JVM

Resulta que era un problema con IBM JVM operaciones atómicas.

Existe una solución en tomcats mayor que 6_0_19 para manejarlo.

También no se produce en el sol 1.5 JVM

Éstos son algunos más detalles

tomcat bugzilla case

2

que he visto problemas similares cuando existen los siguientes requisitos previos:

  • múltiple instancias de la aplicación Tomcat se instalan en varias JVM
  • load ba la punción (entre el servidor web y las JVM de Tomcat) no está configurada correctamente.
  • función de duplicación de la sesión del Tomcat es no permitió

Debido a la carga incorrecta de equilibrio de configuración, el servidor web puede decidir al azar para romper la afinidad de sesiones y enviar una solicitud entrante a un Tomcat JVM que nunca ha visto la sesión anterior. La JVM de Tomcat emitirá una nueva sesión y el usuario perderá todos sus datos de sesión previos y volverá a comenzar de manera efectiva.

+0

¿Puede ser más específico sobre cómo el equilibrio de carga no está configurado correctamente? – fool4jesus

Cuestiones relacionadas