2009-06-06 22 views
11

Stiamo eseguendo il server delle applicazioni Tomcat che gestisce oltre 100 sessioni simultanee. Negli ultimi 2 mesi gli utenti più attivi hanno notato che a volte vengono espulsi dal sistema.Le sessioni Tomcat scadono in modo imprevisto

Come ho capito dalle sessioni di log tomcat stanno per scadere senza motivo.

Non vedo problemi dal lato dell'applicazione web. C'è qualche problema dal lato tomcat?

Tomcat 6.0.18.

+2

Che cosa hai trovato essere la causa? –

risposta

8

Se v'è stato alcun codice possibilità innescare questo, vorrei guardare utilizzo della memoria. Questo potrebbe essere l'effetto di Tomcat che esaurisce la memoria e invalidare le sessioni da ripristinare.

Se possibile monitorare le raccolte di rifiuti e/o mettere sorveglianza su jconsole o jvisualvm.

2

c'è un timeout, che è possibile configurare in web.xml:

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

uso -1 per nessun timeout

+1

Il problema non c'è. Il timeout corrente è impostato su un'ora. Ma gli utenti vengono presi a calci mentre usano attivamente l'applicazione –

-1

Anche se non conosco la causa del problema, una possibile correzione (che avevo fatto nel mio progetto precedente) consisteva nell'eseguire l'applicazione su un cluster Tomcat e avere un failover di sessione. Le sessioni possono essere di default appiccicose e quando un nodo scende, i nodi sani raccolgono le sessioni e tutto ciò è trasparente per l'utente finale.

+3

Sembra che il clustering abbia maggiori probabilità di causare problemi con le sessioni piuttosto che risolverle. – erickson

2

Aumentare la registrazione delle sessioni, che potrebbe far luce sul problema.

La pagina di configurazione Tomcat Logging in Tomcat include un esempio di registrazione crescente delle sessioni.

0

È possibile cercare il database dei bug di Tomcat, ma sarebbe meglio dare un altro sguardo all'applicazione Web. Le probabilità che ci sia qualcosa di sbagliato in Tomcat sono molto basse.

Cercare di indagare su cosa causa l'invalidazione della sessione. Stai usando i filtri? Avete richieste cross-context? Prova ad aggiungere informazioni di registrazione per ogni richiesta per scoprirlo, quando la sessione viene persa esattamente.

4

Vorrei aumentare il monitoraggio del server in generale e delle sessioni in modo specifico.

Una buona applicazione di monitoraggio è lambda probe - consente di visualizzare le sessioni correnti ei relativi dati. Vorrei anche aggiungere un HttpSessionListener per registrare la creazione e la distruzione della sessione.

Modifica

IS è possibile che si aggiungono alcuni oggetti non serializble alla sessione e Tomcat non riesce a loro passivazione al disco?

Edit 2

sonda lambda sembra essere morto, e c'è una migliore fork del progetto oltre a http://code.google.com/p/psi-probe/

7

Una causa possibile è che si mette nella sessione un oggetto che non fa implementare l'interfaccia serializzabile. Tomcat scrive occasionalmente alcune delle sessioni sul disco. Se una sessione contiene oggetti non serializzabili, verrà semplicemente rimossa dal contenitore (a causa di NotSerializableException). Se ciò accade, dovresti vedere l'eccezione nel file di registro di tomcat.

+0

In quali casi Tomcat scrive sessioni su disco? in ambiente cluster o quando sta esaurendo la memoria? –

2

Abbiamo appena incontrato questo con Tomcat 6_0_18 e IBM 1.5 JVM

scopre che era un problema JVM IBM con le operazioni atomiche.

C'è una correzione in tomcats maggiore di 6_0_19 per gestirlo.

Inoltre non si verifica in sole 1.5 JVM

qui sono alcuni dettagli

tomcat bugzilla case

2

ho visto problemi simili quando esistono i seguenti prerequisiti:

  • multipla istanze dell'applicazione Tomcat sono installate su più JVM
  • carico ba il lancing (tra il server Web e le JVM Tomcat) non è configurato correttamente.
  • funzionalità di replica della sessione Tomcat è non abilitato

A causa del carico errato bilanciamento di configurazione, il server web in modo casuale potrebbe decidere di rompere l'affinità di sessione e inviare una richiesta in arrivo ad un Tomcat JVM che non ha mai visto la sessione prima. Tomcat JVM emetterà una nuova sessione e l'utente perderà tutti i dati della sessione precedente e ricomincia effettivamente.

+0

Puoi essere più specifico su come il bilanciamento del carico non è configurato correttamente? – fool4jesus

Problemi correlati