【问题标题】:How to track origin of a thread from pools?如何从池中跟踪线程的来源?
【发布时间】:2012-08-28 12:39:24
【问题描述】:

我正在通过在 Netbeans 中使用分析来优化我的服务器应用程序,并发现一些具有默认名称的狂野线程(例如 pool-25-thread-1)在每个新用户登录并且永不终止时产生其中的 40 个。我正在跟踪我通过线程池启动的线程,但这些线程似乎来自第三方类并且不受我的控制。

我必须找到一种方法来跟踪并找到这些线程的来源(哪个类启动了它)以避免或改进那些第三方代码。

谢谢。

【问题讨论】:

标签: java multithreading optimization


【解决方案1】:

您可以附加一个调试器并在Thread.start() 中放置一个断点。

【讨论】:

  • 当您中断 Thread.start() 方法时,您应该能够检查当前堆栈并查看线程来自何处。
  • 问题出在编译后的代码上,不知道是哪一个。
  • @Shisoft - 我不明白你的问题。你指的是本机代码吗?
  • @Shisoft - 好的,这对我的建议有何影响?
  • @Shisoft - 可以询问您的 IDE。
【解决方案2】:

您可以通过查看线程的堆栈跟踪来识别线程的入口点,这通常可以让您合理地了解哪个库负责创建它。

【讨论】:

  • 我使用过 VisualVM 并尝试转储线程。但是堆栈跟踪只告诉我线程来自线程池,我仍然不知道池来自哪里。
猜你喜欢
  • 2021-10-29
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
  • 2018-10-04
  • 1970-01-01
相关资源
最近更新 更多