Поиск причины ожидающих / спящих потоков

Я заметил, что мое 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

Теперь вопрос: ЧТО эти потоки ждут? У меня есть подозрительный класс, который, кажется, порождают эти потоки, но я не знаю, что именно заставляет эти потоки зависать.

Могу ли я что-нибудь сделать, чтобы найти причину этого, кроме разрыва класса построчно и продолжения наблюдения за поведением потока?

30
задан Timo 10 November 2011 в 21:21
поделиться

2 ответа

На tomcat они обычно запрашивают рабочие потоки, ожидающие подключения. Не о чем беспокоиться. Они готовы обрабатывать эти 100 пользователей, одновременно подключающихся к вашему серверу.

24
ответ дан 28 November 2019 в 00:21
поделиться

Эти темы являются частью ThreadPool. Более конкретно java.util.concurrent.ThreadPoolExecutor. Поток ожидает Runnable / Callable для отправки в пул. Например,

ExecutorService e = Executors.newFixedThreadPool(10);

создаст 10 потоков, которые будут ждать до

e.submit(new Runnable(){
  public void run(){ ...}
});

. Тогда один поток будет уведомлен и вызовет этот работающий объект. Для чего они используются, я не могу сказать. Вам нужно выяснить, с чего начался пул потоков. Возможно, он обрабатывает запросы клиентов к серверу приложений.

6
ответ дан 28 November 2019 в 00:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: