Ich habe Java EE-basierte Anwendung läuft auf Tomcat und ich sehe, dass plötzlich die Anwendung hängt nach dem Ausführen für einige Stunden.Analysieren Thread-Dump eines Java-Prozesses
:ich gesammelt, um den Thread-Dump aus der Anwendung, kurz bevor es und es in TDA zur Analyse setzen hängt: Für den oben stehenden Monitor
TDA (Thread-Dump Analyzer) gibt die folgende Meldung
A lot of threads are waiting for this monitor to become available again.
This might indicate a congestion. You also should analyze other locks
blocked by threads waiting for this monitor as there might be much more
threads waiting for it.
Und hier ist der Stacktrace des Gewindes oben hervorgehoben:
"MY_THREAD" prio=10 tid=0x00007f97f1918800 nid=0x776a
waiting for monitor entry [0x00007f9819560000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.util.Hashtable.get(Hashtable.java:356)
- locked <0x0000000680038b68> (a java.util.Properties)
at java.util.Properties.getProperty(Properties.java:951)
at java.lang.System.getProperty(System.java:709)
at com.MyClass.myMethod(MyClass.java:344)
Ich möchte wissen, was der "waiting for monitor entry"
Zustand bedeutet? Außerdem würde ich mich über Hinweise freuen, die mir helfen, dieses Problem zu beheben.
I würde Lookups von Systemeigenschaften zwischenspeichern, anstatt sie auf diese Weise wiederholt aufzurufen. Sie sollten System.getProperty() nicht mehr als etwa ein Dutzend Mal über die Laufzeit der Anwendung aufrufen müssen. Sie sollten es also so programmieren, dass es kein Flaschenhals ist. –
hmm .. guter Punkt Peter! – peakit