2010-11-15 7 views
9

Ich versuche, einige Speicherprobleme in unserem J2EE-Server zu diagnostizieren. Ich habe jconsole auf unserem Live-Server eingerichtet und versuche nun, den Status des Tomcat-Servers zu überwachen. Ich habe eine kurze Frage zum Tab Threads in jconsole. Ich kann einen Thread namens Finalizer in der Thread-Liste sehen. Die 'Total blocked'-Nummer in diesem Thread nimmt weiter zu. Zum Beispiel ist es jetzt 4.049, vor einer Stunde waren es 3.867.Verwenden von Jconsole für Speicherverlust

Name: Finalizer
State: WAITING on [email protected]
Total blocked: 4,049 Total waited: 1,579

Was bedeutet dieses Thema? Ist es irgendwie mit dem GC verwandt? Ich habe einen Heap-Dump heruntergeladen, in dem die Anzahl der für die Fertigstellung ausstehenden Objekte gleich Null ist.

Die maximale Heap-Größe meines Servers beträgt derzeit 200 MB, die Größe des Heapspeichers bleibt zwischen 100 und 150 MB, und wenn ich auf "Perform GC" klicke, kann ich sehen, dass einige Heap-Speicher freigegeben werden. Dies ändert jedoch nicht die Menge an Speicher, die von diesem Tomcat-Prozess im Windows-Task-Manager verbraucht wird, der derzeit über 700 MB verbraucht.

Alle Tipps, wie ich darüber gehen sollte, werden sehr geschätzt. Bitte stellen Sie mir Fragen, wenn Sie weitere Informationen zu meiner Serverkonfiguration benötigen.

Vielen Dank im Voraus.

Antwort

10

Ich glaube, ich habe die Antwort auf meine Frage gefunden. Die 'Total blocked' und 'Total warte' sind einfach gezählt für die Anzahl der Male, die der Thread gewartet hat oder blockiert wurde. JConsole nimmt diese Informationen von ThreadInfo.

Blockierte Anzahl ist die Gesamtzahl der Male, die der Thread blockiert, um einen Monitor einzugeben oder erneut einzugeben. I.e. Die Häufigkeit, mit der ein Thread im Status java.lang.Thread.State.BLOCKED war.

Wartezählung ist die Gesamtzahl der Male, die der Thread auf Benachrichtigung gewartet hat. d. h. wie oft ein Thread im Zustand java.lang.Thread.State.WAITING oder java.lang.Thread.State.TIMED_WAITING war.

+0

Übrigens ist die Zeit in Sekunden, in meinem Test. –

0

Der Windows-Task-Manager zeigt die Größe des virtuellen Speichers an und ist meistens nicht korrekt. Ich habe das viel Zeit gesehen, was JConsole zeigt, da der Footprint der richtige Speicher ist.

Weitere Informationen zu JConsole finden Sie unter here.

+0

Vielen Dank für Ihre Verbindung zu tun. Ich habe mir diese Seite schon vorher angesehen.Es gibt einen Screenshot des Finalizer-Threads, über den ich spreche (Abbildung 3-8). Es werden jedoch keine Details zu dem Thread oder den Attributen Total blocked und Total wait behandelt. –

1

Name: Finalizer Zustand: WAITING auf [email protected] Gesamt gesperrt: 4049 Insgesamt wartete: 1.579

Die Reference eine Referenz ist die Aufrechterhaltung für alle unbenutzten Objekte (warten auf Finalisierung), dh 4049 Objekte warten auf eine Garbage Collection.

Wenn für Speicherlecks Jagd, sollten Sie eine vollständige GC tun (oder viele GC, bis nichts mehr nicht zurückgewonnen werden kann) vor der Müllhalde