So überwachen und löschen Sie abgelaufene Sitzungen in Tomcat

So überwachen und löschen Sie abgelaufene Sitzungen in Tomcat

Vorwort

Ich habe zufällig entdeckt, dass die halbstündige Tomcat-Sitzungsdauer nicht bedeutet, dass die Sitzung nach dem Erstellen nur eine halbe Stunde gültig ist, sondern dass die Sitzung nach einer halben Stunde Inaktivität gelöscht wird. Ich habe gerade den Quellcode durchgeblättert. Habe ein bisschen aufgeräumt.

Hinweis: Mit Leerlaufzeit ist das Intervall zwischen zwei Anfragen in derselben Sitzung gemeint.

Sitzungsbezogenes Klassendiagramm


  • HttpSession ist die Sitzung, die direkt von der Servlet-Schicht verwendet werden kann.
  • Session ist eine Schnittstelle, die intern von Tomcat verwendet wird und einige interne Aufrufe durchführen kann
  • StandardSession ist eine standardmäßige HttpSession-Implementierung. Sie implementiert auch die Session-Schnittstelle für die interne Verwaltung von Tomcat.
  • StandardSessionFacade, der Klassenname lässt bereits darauf schließen, dass es sich um eine „Fassadenklasse“ handelt, die intern auf ein StandardSession Objekt verweist, nach außen jedoch nur die von HttpSession spezifizierten Methoden bereitstellt.

Managerbezogenes Klassendiagramm


StandardManager und PersitentManager sind beide Implementierungen von Manager, sie unterscheiden sich jedoch in der Art und Weise, wie sie Sitzungsobjekte speichern.

StandardManager

1. Wenn Tomcat ausgeführt wird, wird die Sitzung im Speicher gespeichert

2. Wenn Tomcat heruntergefahren wird (beachten Sie, dass es sich um einen normalen Herunterfahrvorgang und nicht um einen plötzlichen Absturz handelt), wird die Sitzung auf die Festplatte geschrieben und nach dem Neustart von Tomcat erneut geladen.

PersistentManager

1. Speichern Sie die Sitzung immer auf der Festplatte.

Beziehung zwischen Manager und Kontext

In Tomcat ist ein Kontext eine Anwendung (Webanwendung), die in Tomcat bereitgestellt wird. Jeder Kontext verfügt über ein separates Managerobjekt zum Verwalten der Sitzungsinformationen der Anwendung.

So speichert Manager Sitzungen

Das Manager-Objekt verwendet eine Map zum Speichern von Sitzungsobjekten

  • Schlüssel => Sitzungs-ID
  • Wert => Sitzungsobjekt
 /**
  * Die Menge der derzeit aktiven Sitzungen für diesen Manager, sortiert nach
  * Sitzungskennung.
  */
 geschützte Map<String, Session> Sitzungen = neue ConcurrentHashMap<>();

Wenn eine Anforderung im Kontext eintrifft und sie ein JSESSIONID-Cookie enthält, kann der Manager das zugehörige Sitzungsobjekt finden und in das Anforderungsobjekt einfügen.

Regelmäßige Überprüfung des Managers

Die Manager-Schnittstelle verfügt über eine Methode backgroundProcess(), bei der es sich, wie der Name schon sagt, um eine Hintergrundverarbeitung handelt.

/**
  * Diese Methode wird vom Kontext/Container in regelmäßigen Abständen aufgerufen
  * Basis und ermöglicht dem Manager die Umsetzung
  * eine Methode, die periodische Aufgaben ausführt, wie z. B. das Ablaufen von Sitzungen usw.
  */
 öffentliche void Hintergrundprozess();

Hinweis: Die Container-Schnittstelle verfügt auch über diese Methode. Diese Methode startet normalerweise einen zusätzlichen Thread, um die Methode backgroundProcess auszuführen, wenn der Container gestartet wird. Nachdem diese Context-Methode gestartet wurde, werden die BackgroundProcess-Methoden von Loader und Manager ausgeführt.

Schauen wir uns an, was diese Methode macht.

/**
 * {@inheritDoc}
 * <p>
 * Direkter Aufruf von {@link #processExpires()}
 */
@Überschreiben
public void Hintergrundprozess() {
 Anzahl = (Anzahl + 1) % processExpiresFrequency;
 if (count == 0) //Wenn die Prüfhäufigkeit erreicht ist, beginne mit der Prüfung processExpires();
}

/**
 * Alle abgelaufenen Sitzungen ungültig machen.
 */
public void Prozess läuft ab() {

 lange ZeitJetzt = System.currentTimeMillis();
 Sitzung session[] = findSessions(); //Alle Sitzungsobjekte abrufen int expireHere = 0 ; //Anzahl der abgelaufenen Sitzungen, lassen Sie sich nicht von diesem Variablennamen täuschen if(log.isDebugEnabled())
  log.debug("Starten Sie ablaufende Sitzungen " + getName() + " um " + timeNow + " sessioncount " + sessions.length);
 für (int i = 0; i < Sitzungslänge; i++) {
  wenn (sessions[i]!=null und !sessions[i].isValid()) {
   läuft hier ab++;
  }
 }
 langes timeEnd = System.currentTimeMillis();
 if(log.isDebugEnabled()) //Datensätze drucken log.debug("Ende abgelaufener Sitzungen " + getName() + " processingTime " + (timeEnd - timeNow) + " abgelaufene Sitzungen: " + expireHere);
 Verarbeitungszeit += (Endzeit – Jetztzeit);

}

Viele Leute haben möglicherweise die gleichen Zweifel wie ich, wenn sie dies sehen. Das heißt, es gibt keinen Vorgang zum Ablaufen der Sitzung, es scheint, als würde nur eine Statusprüfung durchgeführt. Aber später sah ich die Implementierung der isValid-Methode der Session und verstand alles.

/**
 * Gibt das Flag <code>isValid</code> für diese Sitzung zurück.
 */
@Überschreiben
öffentliches Boolean ist gültig() {

 wenn (!this.isValid) {
  gibt false zurück;
 }

 wenn (dies.abläuft) {
  gibt true zurück;
 }

 wenn (ACTIVITY_CHECK && accessCount.get() > 0) {
  gibt true zurück;
 }

 //Der entscheidende Punkt //Wenn die maximale Leerlaufzeit festgelegt ist, //rufe die Leerlaufzeit dieser Sitzung ab, um sie zu beurteilen. //Wenn die Zeit abgelaufen ist, führe den Ablaufvorgang aus, if (maxInactiveInterval > 0) { 
  In diesem Beispiel wird die Zeit für die Idle-Zeit in der Idle-Datenbank verwendet.
  wenn (Leerlaufzeit >= maxInaktivesIntervall) {
   ablaufen(wahr);
  }
 }

 gib dies zurück.isValid;
}

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • So verwenden Sie JVisualVM zur Leistungsanalyse in der Java-Entwicklung
  • So überwachen Sie Tomcat mit LambdaProbe
  • So aktivieren Sie die JMX-Überwachung über Tomcat
  • Detailliertes Tutorial zur Überwachung von Nginx/Tomcat/MySQL mit Zabbix
  • Schritte zum Überwachen des Tomcat-Status und zum automatischen Starten mithilfe von Shell-Skripten unter Linux
  • Python-Skript zur Überwachung der Tomcat-Servermethode
  • Die Java Virtual Machine verwendet das Tool jvisualvm, um den Tomcat-Speicher remote zu überwachen

<<:  So nummerieren Sie die Ergebnisse von MySQL-Abfragedaten automatisch

>>:  js implementiert eine einfache dreistufige Auswahlkaskade für Provinzen, Gemeinden und Bezirke

Artikel empfehlen

Details zur Verwendung regulärer Ausdrücke in MySQL

Inhaltsverzeichnis 1. Einleitung 2. Bereiten Sie ...

HTML+CSS zum Erstellen eines Dropdown-Menüs

1. Beispiel einer Dropdown-Liste Der Code lautet ...

CSS3 erzielt einen coolen Karusselleffekt mit geschnittenen Bildern

Heute lernen wir, wie man mit CSS eine coole Bild...

Was tun, wenn Sie Ihr MySQL-Passwort vergessen?

Lösung zum Vergessen des MySQL-Passworts: [root@l...

Implementierung des Docker-Verpackungsimages und Konfigurationsänderung

Ich bin in letzter Zeit beim Erlernen von Docker ...

CSS-Beispielcode zum Festlegen des Bildlaufleistenstils

Der CSS-Implementierungscode zum Festlegen des Bi...

Javascript-Betriebsmechanismus „Event Loop“

Inhaltsverzeichnis 1. Vier Konzepte 1. JavaScript...

Vue implementiert einen einfachen Lupeneffekt

In diesem Artikelbeispiel wird der spezifische Co...

Einführung in die Verwendung von MySQL-Quellbefehlen

Inhaltsverzeichnis Gedanken, die durch eine Onlin...

So verwenden Sie Webstorm und Chrome zum Debuggen von Vue-Projekten

Inhaltsverzeichnis Vorwort 1. Erstellen Sie ein n...

Beispiel für eine Nginx-Cache-Konfiguration

Beim Entwickeln und Debuggen einer Webanwendung s...