Ответ 1
В tomcat они обычно запрашивают рабочие потоки, ожидая, что кто-то подключится. Не о чем беспокоиться. Они готовы обращаться к тем 100 пользователям, которые подключаются сразу к вашему серверу.
Я заметил, что мое приложение 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
Теперь возникает вопрос: ЧТО ждут эти потоки? У меня есть подозрительный класс, который, кажется, порождает эти потоки, но я не знаю, что именно заставляет эти потоки застревать.
Есть ли что-нибудь, что я могу сделать, чтобы найти причину этого, кроме разрыва класса отдельно, и следить за поведением потока?
В tomcat они обычно запрашивают рабочие потоки, ожидая, что кто-то подключится. Не о чем беспокоиться. Они готовы обращаться к тем 100 пользователям, которые подключаются сразу к вашему серверу.
Эти потоки являются частью ThreadPool. Более конкретно java.util.concurrent.ThreadPoolExecutor. Поток ожидает, когда Runnable/Callable будет отправлен в пул. Например
ExecutorService e = Executors.newFixedThreadPool(10);
Создает 10 потоков, которые будут ждать до
e.submit(new Runnable(){
public void run(){ ...}
});
Затем один поток будет уведомлен и вызовет этот runnable. То, что они используют, я не могу сказать. Вам нужно будет узнать, что запустило пул потоков. Возможно, его обработка клиентских запросов на сервер приложений.