在tomcat 7线程转储上看到多个TIMED_WAITING线程

时间:2014-06-11 06:01:18

标签: java multithreading tomcat

我们继续在tomcat 7中监视我们的线程,最近我们开始看到线程数量有时会变成正常值的两倍,即大约200个线程(而不是通常的大约80个线程)。

在进行线程转储时,我看到在线程数增加的时间内,由于存在大量(大约100个)线程而增加,如下所示(所有等待588cc7d5):

"http-bio-8080-exec-201" - Thread t@2856
   java.lang.Thread.State: TIMED_WAITING
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for <588cc7d5> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
    at java.util.concurrent.LinkedBlockingQueue.poll(Unknown Source)
    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(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

   Locked ownable synchronizers:
    - None

有谁知道会导致这种行为的原因?

1 个答案:

答案 0 :(得分:0)

可能您已达到8080连接器线程池大小的限制,并且所有传入请求都堆叠在队列中并等待已发布的线程。 maxThreads的默认值为200,但可以在配置中更改此值。 有关详细信息,请参阅http://tomcat.apache.org/tomcat-7.0-doc/config/executor.html。 完整的线程转储对于细节更有用。