Java线程问题

时间:2011-08-24 13:23:48

标签: java multithreading web-applications hang

在上次更新后(我找不到任何犯罪行为)我的申请在1-2小时的工作后开始挂起。我描述了我的应用程序:一切都很好,但过了一段时间我就看到了:

热点:

enter image description here

线程监控器:

enter image description here

它可以是什么?我不知道,因为Tomcat日志不包含错误,我看不到堆栈操作(只有direct JVM call - 见图)。此外,我在这个Tomcat上有另一个应用程序,它(另一个应用程序)仍然完美无缺。

有什么想法吗?

1 个答案:

答案 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