Я заметил, что мое приложение java (работает на tomcat6) генерирует много потоков, которые не завершаются.
Итак, я создал дамп потока и заметил, что есть тонны потоков, ожидающих, например:
"pool-1-thread-22" prio=5 tid=101b4b000 nid=0x127122000 waiting on condition [127121000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <6c340cee0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:680)
Locked ownable synchronizers:
- None
Теперь возникает вопрос: ЧТО ждут эти потоки? У меня есть подозрительный класс, который, кажется, порождает эти потоки, но я не знаю, что именно заставляет эти потоки застревать.
Есть ли что-нибудь, что я могу сделать, чтобы найти причину этого, кроме разрыва класса отдельно, и следить за поведением потока?