Tôi có ứng dụng dựa trên Java EE chạy trên tomcat và tôi thấy rằng đột nhiên ứng dụng bị treo sau khi chạy trong vài giờ.Phân tích kết xuất chuỗi của một quá trình java
tôi thu thập các bãi chứa thread từ các ứng dụng ngay trước khi nó bị treo và đặt nó trong TDA để phân tích:
TDA (Chủ đề Dump Analyzer) đưa ra thông điệp sau cho màn hình trên:
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.
Và đây là stacktrace của thread nêu trên:
"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)
Tôi muốn biết trạng thái "waiting for monitor entry"
có nghĩa là gì? Và cũng sẽ đánh giá cao bất kỳ con trỏ nào để giúp tôi gỡ lỗi vấn đề này.
tôi sẽ bộ nhớ cache tra cứu các thuộc tính hệ thống hơn là gọi chúng lặp đi lặp lại như thế này. Bạn không cần phải gọi System.getProperty() nhiều hơn khoảng một chục lần trong suốt vòng đời của ứng dụng. tức là bạn nên mã hóa nó để không phải là cổ chai. –
hmm .. điểm tốt Peter! – peakit