我在RHEL OS中的1.5 java VM中运行J2SE应用程序。该应用程序的任务之一是在启动期间创建3个无限运行的用户线程。目的是检查后端数据库表中特定类型的请求并执行相应的操作。
正如我们所观察到的,长时间运行的线程突然停止运行,但仍然可以看到应用程序处于活动状态并且可以看到JVM进程,在ps -ef | grep java
有人可以说明为什么创建的线程在无限循环中运行会突然停止吗?关于如何检测此问题和可能的解决方案的任何想法将是非常有帮助的
关心, 克里希纳
答案 0 :(得分:5)
我建议将Ctrl+Break发送到您的应用,转储线程并分析输出。也许你的线程正在等待一些输入(IO)。也许他们陷入僵局。也许他们已经退出了一个未被捕获的例外。线程转储将告诉你发生了什么(如果你事先命名你的线程,它会有帮助,所以你可以在转储中识别它们。)
答案 1 :(得分:3)
也许你有未处理的例外情况。
首先,您应该记录所有线程活动(您可以使用log4j来实现此目的)。
您还可以覆盖ThreadGroup类的uncaughtException方法,并在线程因未捕获的异常而死亡时创建警报。