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