tomcat的work线程占用大量cpu

tengjinwei 2014-11-05 09:12:45
遇到个问题,服务器load非常高,晚上会下降不少,第二天照旧,cpu在繁忙时基本上能占到100%,如果重启,会短暂恢复,几天内load又会变得越来越高,跟踪线程栈找CPU占用高的发现都是work线程,诡异的是他们处在waiting状态啊!而且是占用时间非常长,十几个小时。
比如下面这条线程
"http-0.0.0.0-7001-12" daemon prio=10 tid=0x00007f541463a000 nid=0xd7d9 in Object.wait() [0x000000004c067000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x000000077390c838> (a org.apache.tomcat.util.net.AprEndpoint$Worker)
at java.lang.Object.wait(Object.java:485)
at org.apache.tomcat.util.net.AprEndpoint$Worker.await(AprEndpoint.java:1464)
- locked <0x000000077390c838> (a org.apache.tomcat.util.net.AprEndpoint$Worker)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1489)

推测还是代码问题,什么情况会导致这种问题呢,无头绪啊,求大神
...全文
346 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
humanity 2014-11-12
  • 打赏
  • 举报
回复



引用 2 楼 zhangjihao 的回复:
这种情况表面很难看出问题,可以试着从以下方面入手:
1、Tomcat最大连接线程数设了多少?
2、Tomcat版本多少?JDK版本多少?JDK和操作系统位数多少?
3、在峰值时查一下Tomcat端口连接数多少(外界访问客户端数)?
4、最后一个最大也是最有可能发生的因素,跟踪和找出慢业务。

提供两个跟踪方法:
1、使用JDK自带的jConsole监视Tomcat的线程和资源情况。jConsole怎么用可以问Google
2、使用Eclipse远程调试功能,在被卡住的线程的栈里找到本应用业务代码,就可以看到什么地方有问题。
tengjinwei 2014-11-12
  • 打赏
  • 举报
回复
使用ps -eLf命令拿到的线程运行占用cpu时间,这个时间什么时候会被重置呢??
tengjinwei 2014-11-06
  • 打赏
  • 举报
回复
处于waitting状态是因为dump的时候恰好处于这种状态,其他时间是处于runnable
zy_think123 2014-11-06
  • 打赏
  • 举报
回复
按照楼上仁兄的试一试
howsun_zh 2014-11-06
  • 打赏
  • 举报
回复
这种情况表面很难看出问题,可以试着从以下方面入手: 1、Tomcat最大连接线程数设了多少? 2、Tomcat版本多少?JDK版本多少?JDK和操作系统位数多少? 3、在峰值时查一下Tomcat端口连接数多少(外界访问客户端数)? 4、最后一个最大也是最有可能发生的因素,跟踪和找出慢业务。 提供两个跟踪方法: 1、使用JDK自带的jConsole监视Tomcat的线程和资源情况。jConsole怎么用可以问Google 2、使用Eclipse远程调试功能,在被卡住的线程的栈里找到本应用业务代码,就可以看到什么地方有问题。
Inhibitory 2014-11-05
  • 打赏
  • 举报
回复
可以看看代码里调用wait的地方,什么情况下导致这么多wait的线程。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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