Zauważyłem, że moja aplikacja java (działa na tomcat6) spawnuje wiele wątków, które się nie kończą.Znajdowanie przyczyny oczekujących/wątków wątków
Więc stworzyłem zrzut wątek i zauważyłem, że istnieje mnóstwo wątków oczekujących, tak:
"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
Teraz pytanie brzmi: co to są te wątki czekają? Mam podejrzaną klasę, która wydaje się odradzać te wątki, ale nie wiem, co dokładnie sprawia, że te wątki utknęły.
Czy jest coś, co mogę zrobić, aby znaleźć przyczynę tego problemu, z wyjątkiem rozerwania klasy po linii i monitorowania zachowania wątków?
Um, blokują w kolejce. W szczególności 'LinkedBlockingQueue.take()', który blokuje w nieskończoność, gdy kolejka jest pusta. –
Co to znaczy? Jaka jest kolejka i co robi ta metoda 'take()'? – Timo
Erm, to twój kod ... nie jesteśmy medium. Właśnie mówię ci dokładnie, co mówi ci zrzut wątku. –