问题在于:我正在使用Quartz维护一些旧的J2EE代码,其中我的线程已经用完了。 jconsole
告诉我,当它呈梨形时,只有不到60K的线程,其中大约100(!!)实际上正在运行。直觉和一些谷歌搜索(参见here)表明正在发生的事情(我认为Quartz)正在创建永远不会被清理的非托管线程。
几个子问题:
答案 0 :(得分:4)
尝试增加org.quartz.simpl.SimpleThreadPool
的日志记录级别以进行调试以获取更多信息。
如果这不起作用,请尝试使用日志记录侦听器。 Quartz有一个JobListener接口,在tutorial中指定。监听器可以帮助您跟踪作业执行情况。也许工作没有完成并陷入僵局。
配置org.quartz.threadPool.threadCount
以停止用完线程。
<强>更新强>
此外,您可能想要进行线程转储并查看线程统计信息。 visual vm有一个名为TDA的插件,或者您可以直接使用Thread dump analyzer。
以防万一,检查石英版本,看看是否有已知错误。
答案 1 :(得分:0)
您是否看过jvisualvm - 它提供了更多信息。
此外,获取堆栈跟踪以查看线程实际等待的内容。你可能会有一种感觉。