9

毕竟万圣节。

这就是问题所在:我正在使用 Quartz 维护一些老式的 J2EE 代码,但其中的线程已经用完了。 jconsole告诉我当它变成梨形时只有 60K 线程,其中大约 100(!!)实际上正在运行。直觉和一些谷歌搜索(另见这里)表明正在发生的事情(我打赌 Quartz)正在创建永远不会被清理的非托管线程。

几个子问题:

  1. 它有一个工具,我可以轻松地使用它来跟踪线程创建,所以我可以确定问题真的是 Quartz?

  2. 我发现的关于类似问题的大部分内容都参考了 Weblogic;这是Tomcat的错误线索吗?

  3. 有人有已知的解决方案吗?

自从我做 J2EE 以来已经有好几年了,所以如果这是可以简单解决的问题,我不会太惊讶。

更新:它显然在无限制地增加线程,请参阅 jconsole 中的此图。

他们死了,吉姆

4

2 回答 2

4
  • 尝试增加org.quartz.simpl.SimpleThreadPool调试的日志记录级别以获取更多信息。

  • 如果这不起作用,请尝试使用日志记录侦听器。Quartz 有一个 JobListener 接口,在其教程中指定。侦听器可以帮助您跟踪作业执行。也许工作没有完成并陷入僵局。

  • 配置org.quartz.threadPool.threadCount为停止用尽线程。

更新:

  • 此外,您可能想要进行线程转储并查看线程统计信息。visual vm有一个叫 TDA 的插件,或者你可以直接使用线程转储分析器

  • 以防万一,检查石英版本,看看是否没有已知的错误。

于 2009-10-30T16:41:02.633 回答
0

你看过 jvisualvm - 它提供了更多信息。

此外,获取堆栈跟踪以查看线程实际在等待什么。你可能会在那里有一种哈哈的感觉。

于 2009-10-30T17:21:21.053 回答