Tomcat配置好线程池后用jstack发现有很多线程处于这种状态,正常吗?

流子
游戏开发领域优质创作者
博客专家认证
2011-06-20 08:50:03
如下,都是以
catalina-exec-开头的,大概有200个线程,都处于这种状态,
"catalina-exec-484" daemon prio=10 tid=0x0000002c0b3e5400 nid=0x2bda waiting on condition [0x0000000060f35000..0x0000000060f35db0]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x0000002ac2471888> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1963)
at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:395)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:944)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:906)
at java.lang.Thread.run(Thread.java:619)
网上查到的信息如下:但不清楚如何解决?
如果发现有大量的线程都在处在 Wait on condition,从线程 stack看, 正等待网络读写,这可能是一个网络瓶颈的征兆。因为网络阻塞导致线程无法执行。一种情况是网络非常忙,几 乎消耗了所有的带宽,仍然有大量数据等待网络读 写;另一种情况也可能是网络空闲,但由于路由等问题,导致包无法正常的到达。所以要结合系统的一些性能观察工具来综合分析,比如 netstat统计单位时间的发送包的数目,如果很明显超过了所在网络带宽的限制 ; 观察 cpu的利用率,如果系统态的 CPU时间,相对于用户态的 CPU时间比例较高;如果程序运行在 Solaris 10平台上,可以用 dtrace工具看系统调用的情况,如果观察到 read/write的系统调用的次数或者运行时间遥遥领先;这些都指向由于网络带宽所限导致的网络瓶颈。

...全文
3193 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
orc_chan 2011-10-11
  • 打赏
  • 举报
回复
补充下:经过测试这是很正常的现象,你可能启用了Tomcat的线程池,并且有20个左右的并发访问,的话就会产生您这种情况。

<!-- Modified by 陈炳灿2011-10-11 注视掉这段 -->
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>


"catalina-exec-18" daemon prio=6 tid=0x0c84f800 nid=0xee8 waiting on condition [0x0ef9f000..0x0ef9f9e8]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x053567b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1963)
at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:395)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:945)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)

Locked ownable synchronizers:
- None
orc_chan 2011-10-11
  • 打赏
  • 举报
回复
catalina-exec-484
这个是线程的名字,一般这种线程是Tomcat自己的线程不需要我们自己来控制所以不需要理他,你要关注的是自己定义的线程的stack trace

这是我个人的理解,不对,也别拍砖!
javaors 2011-06-22
  • 打赏
  • 举报
回复
哎,这个区都是这个样子。

发半天没人理。

你这个用来干嘛的? 压力测试?
流子 2011-06-22
  • 打赏
  • 举报
回复
大家有遇到过这种问题吗?服务器是16核的
流子 2011-06-21
  • 打赏
  • 举报
回复
有哪位英雄知道吗?
流子 2011-06-21
  • 打赏
  • 举报
回复
是吗,等待中
javaors 2011-06-21
  • 打赏
  • 举报
回复
这个区是个鸟不拉屎的地方,我放了一个100分的题目,一周都没有人说一句话。
我想结贴都结不了。

5,657

社区成员

发帖
与我相关
我的任务
社区描述
Web开发应用服务器相关讨论专区
社区管理员
  • 应用服务器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧