第一步用jps查进程信息:
jps -l 会列出所有 Java 进程和主类名,加 -v 还能看到 JVM 启动参数。
第二步用jstack查线程
jstack <pid> pid是上面jps得到的进程号
输出格式
线程名 内部线程编号 prio=(优先级别) tid=(JVM线程ID)nid=(操作系统线程 ID)
java.lang.Thread.State 线程状态:
| 状态 | 含义 | 常见原因 |
|---|---|---|
RUNNABLE |
运行中/可运行 | 正常,但持续 RUNNABLE 可能是死循环 |
BLOCKED |
等待获取锁 | 锁竞争,排查死锁看这个 |
WAITING |
无限等待 | wait() / join() / park() |
TIMED_WAITING |
限时等待 | sleep() / wait(timeout),心跳线程正常就该是这个 |
NEW / TERMINATED |
未启动/已结束 | 少见 |
死锁要查Found one Java-level deadlock 可以看线程等待情况