【问题标题】:How to use jstack to find blocker-thread如何使用 jstack 查找阻塞线程
【发布时间】:2011-11-24 10:32:46
【问题描述】:

使用 jstack 我得到了一棵正在运行的线程树。

  1. 下面的Thread.State是什么意思:

    • 等待中
    • TIMED_WAITING
    • 可运行
  2. tid 和 nid 是什么意思?

  3. 一个线程的标题是这样的

    “事件批处理 (Spring UAA/1.0.2)”守护进程 prio=10 tid=0x0000000041e27800 nid=0x363b 等待条件 [0x00007f9a89267000]

    • 如何导航到“等待条件”地址的源代码行

【问题讨论】:

  • "我如何导航到"waiting-on-condition"-address"的源代码行:为此,您需要查看该线程的堆栈跟踪。
  • 等待条件 [0x000....] 这个数字代表什么?

标签: java jstack


【解决方案1】:
  1. WAITING 表示线程正在等待某事。通常你会看到“WAITING (on object monitor)”,这意味着它正在等待一个 notify()。 TIMED_WAITING 是 WAITING 的变体,其中线程有一个最大等待时间限制。 RUNNABLE 表示 jstack 运行时线程当前正在执行一些代码。

  2. “tid”是线程在 JVM 中的线程 ID(可能是内存地址)。 “nid”是本机线程 ID(十六进制)。在某些 Linux 系统上,此 ID 直接映射到进程 ID(在您的情况下为数字 13883(十进制))。

  3. 如果您使用的是 Eclipse,那么您可能会对插件 http://lockness.plugin.free.fr/ 感兴趣。使用此工具可以快速导航到源代码和行。

【讨论】:

    猜你喜欢
    • 2020-04-30
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    相关资源
    最近更新 更多