2012-06-04 16 views
11

Gần đây, một trong các máy chủ tomcat sản xuất của chúng tôi không phản hồi vì chuỗi bận rộn của tomcat đã bắn tối đa 200. Khi chúng tôi lấy chuỗi chủ đề trước khi khởi động lại, chúng tôi có 100 chuỗi trong TIMED_WAITING tình trạng như thế này 3 chủ đề:100 chủ đề TIMED_WAITING trong tomcat, khiến nó ngừng hoạt động khi tổng số chủ đề vượt qua 200

""http-bio-7007"-exec-241" daemon prio=10 tid=0x00002aaab107b000 nid=0x59df waiting on condition [0x0000000051239000] 
java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000580d877d0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198) 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025) 
    at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:424) 
    at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:86) 
    at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:32) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:945) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) 
    at java.lang.Thread.run(Thread.java:662) 

""http-bio-7007"-exec-237" daemon prio=10 tid=0x00002aaab186e000 nid=0x596d waiting on condition [0x000000004d1f9000] 
java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000580d877d0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198) 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025) 
    at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:424) 
    at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:86) 
    at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:32) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:945) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) 
    at java.lang.Thread.run(Thread.java:662) 

""http-bio-7007"-exec-236" daemon prio=10 tid=0x00002aaab1118000 nid=0x596c waiting on condition [0x000000004e50c000] 
java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x0000000580d877d0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198) 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025) 
    at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:424) 
    at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:86) 
    at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:32) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:945) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) 
    at java.lang.Thread.run(Thread.java:662) 

Chúng tôi đã hồ chủ đề 4 ứng dụng (ví dụ như hồ bơi-4-thread-20 vv) cũng được có 20 bài mỗi vì vậy tôi không chắc chắn mà chặn xếp hàng những 100 chủ đề chờ đợi ? Chúng tôi đang sử dụng hồ bơi kết nối c3P0 với hibernate mà không có vẻ là nguyên nhân của việc này.

Bất kỳ ý tưởng nào java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject là gì?

+0

Bạn đã thử lấy một Dump Heap và chạy nó thông qua [MAT] (http://www.eclipse.org/mat/) để xem những gì đối tượng đang tích lũy? –

+2

Hiện tại chúng tôi có cùng một vấn đề. Ngay cả khởi động lại tomcat cũng không giúp được gì. Sau khi khởi động lại evrything làm việc một lần nữa. STRANGE! bị điều tra thêm và sẽ báo cáo nếu tôi thấy điều gì đó thú vị. – Janning

+0

Nó không có gì để làm với hibernate như chúng ta gặp phải vấn đề này tối nay trên trang trại máy chủ hoàn chỉnh của chúng tôi và một số người trong số họ chỉ là máy chủ hình ảnh mà không có bất kỳ hibernate hoặc cơ sở dữ liệu stack. – Janning

Trả lời

5

Điều này đã được khắc phục khi chúng tôi sửa mã của chúng tôi đã bị rò rỉ kết nối DB do c3p0 quản lý. Có vài dòng trong mã của chúng ta, chúng ta không gọi rollback() đặc biệt trong khối catch trước khi đóng thực thể quản lý trong khối cuối cùng, vì vậy trong trường hợp ngoại lệ kết nối không quay trở lại và nếu tần suất ngoại lệ cao (nhiều hơn kích thước của hồ bơi trong khoảng thời gian chờ) sau đó tất cả các quy trình xử lý khác sẽ chồng chất để nhận kết nối.

+0

Tôi gặp vấn đề tương tự, bạn có thể vui lòng hỗ trợ tôi về cách sử dụng kết nối không? Vì vậy, nó không thể bị rò rỉ. – Mohanraj

4

Bất kỳ ý tưởng nào java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject là gì?

ConditionObject được sử dụng trong hàng đợi để đồng bộ hóa quyền truy cập vào hàng đợi theo các chuỗi khác nhau.

Ngăn xếp chuẩn của nó, khi một luồng của executerpool của bạn ở chế độ chờ và đợi các tác vụ mới.

Các vấn đề liên quan