我有基於Java EE的應用程序在tomcat上運行,我看到突然間應用程序在運行幾個小時後掛起。分析java進程的線程轉儲
我收集了它掛起之前應用程序的線程轉儲,並把它放在TDA分析:
TDA(線程轉儲分析器)給出了上述監視器以下消息:
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.
這裏是上文所強調的線程的堆棧跟蹤:
"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)
我想知道"waiting for monitor entry"
的狀態是什麼意思?也將不勝感激任何指針來幫助我調試此問題。
我死鎖會緩存查找系統屬性,而不是像這樣重複地調用它們。在應用程序的整個生命週期中,您不需要調用System.getProperty()超過十幾次。即你應該編碼它,因爲它不是瓶頸。 – 2012-07-05 16:06:31
嗯..好點的彼得! – peakit 2012-07-05 16:13:47