上次更新(我找不到任何犯罪行为)后,我的应用程序在1-2小时的工作后开始执行。我异型我的应用程序:一切正常,但过一段时间后,我看到这一点:Java线程问题
热点:
纱线监控器:
什么可以吗?我不知道,因为Tomcat日志不包含错误,我看不到堆栈的操作(只有direct JVM call
- 见图片)。此外,我在这个Tomcat上有另一个应用程序,它(另一个应用程序)仍然完美的工作。
任何想法?
上次更新(我找不到任何犯罪行为)后,我的应用程序在1-2小时的工作后开始执行。我异型我的应用程序:一切正常,但过一段时间后,我看到这一点:Java线程问题
热点:
纱线监控器:
什么可以吗?我不知道,因为Tomcat日志不包含错误,我看不到堆栈的操作(只有direct JVM call
- 见图片)。此外,我在这个Tomcat上有另一个应用程序,它(另一个应用程序)仍然完美的工作。
任何想法?
这是您的HTTP连接器线程池,拥有大量等待线程是非常正常的。
看到这个问题的更多细节:Apache Tomcat Request Threads。
你的表格不是很清楚,但它看起来像消耗了88%的应用程序执行时间 - 他们没有使用系统CPU时间的88% - 毕竟,它们正在等待线程。
使用库存设置,实际上有25个等待线程(请参阅链接问题)。超过2小时404秒/ 25似乎并不过分。这大约是每小时8秒的CPU时间。
这很可能是因为你刚刚添加的同步功能有一个并发问题 - 你应该发布一个特定的问题 - 它看起来不像你的问题是与Tomcat或它的线程池,如果另一个应用程序继续运作。
更新
BLOCKED状态,等待/ TIMED_WAITING 状态之间的区别是什么?
当一个线程调用的Object.wait方法,它释放所有获取的 显示器和(如果我们调用wait方法的 超时版本或TIMED_WAITING)状态投入的等待。现在当线程 通过notify()或notifyAll()调用通知相同的对象 然后线程的等待状态结束并且线程开始 试图重新获得它在 时间获得的所有监视器等待电话。有一段时间,可能会有多个线程尝试重新获得(或者第一次获得)他们的显示器。如果超过 一个线程尝试获取特定对象的监视器,则只有一个线程(由JVM调度程序选择)被授予监视器 ,并且所有其他线程都处于BLOCKED状态。有区别?
来源:http://geekexplains.blogspot.com/2008/07/threadstate-in-java-blocked-vs-waiting.html
你明确自己使用线程池? – djna
只有一个地方我创建线程是通知系统。我在上次更新中同步它。但是,我想,如果我在代码中遇到问题,我会在该代码中看到锁或堆栈。或不? –