温馨提示×

ubuntu java线程怎么查看

小樊
71
2026-10-07 02:23:55
栏目: 编程语言

在 Ubuntu 上查看 Java 进程中的线程,常用方法如下,按“从简单到专业”给你整理:


一、最常用:jps + jstack(推荐)

1️⃣ 查看 Java 进程

jps -l

示例输出:

12345 com.example.MyApp

2️⃣ 查看该 Java 进程的线程栈

jstack 12345

或输出到文件:

jstack 12345 > thread_dump.txt

可以看到:

  • 线程名(如 main、pool-1-thread-1)
  • 线程状态(RUNNABLE、BLOCKED、WAITING)
  • 堆栈信息(哪里卡住)

二、查看线程数和系统线程(Linux 层面)

1️⃣ 查看 Java 进程的线程数

ps -eLf | grep 12345 | wc -l

或:

cat /proc/12345/status | grep Threads

2️⃣ 查看线程列表(轻量级)

ps -T -p 12345

字段说明:

  • PID:进程ID
  • SPID:线程ID(LWP)

三、实时观察线程(top / htop)

1️⃣ top 查看线程

top -H -p 12345
  • -H:显示线程
  • 可以看到哪个线程 CPU 高

2️⃣ htop(更直观)

htop
  • 按 F2 → 设置显示线程
  • 找到 Java 进程展开看线程

四、把系统线程 ID 对应到 Java 线程

当发现某个 LWP 线程 CPU 高 时:

1️⃣ 得到线程 ID(十进制)

top -H -p 12345

2️⃣ 转成十六进制

printf "%x\n" 12346

例如:

303a

3️⃣ 在 jstack 中搜索

jstack 12345 | grep -A 20 303a

就能定位到 具体 Java 线程在干什么


五、使用 jconsole / VisualVM(图形化)

如果有桌面或 X11:

jconsole

或

jvisualvm

可实时查看:

  • 线程数
  • 线程状态
  • 死锁检测

六、常见问题排查场景

CPU 高

  1. top -H -p PID
  2. 找到高 CPU 线程
  3. 转十六进制
  4. jstack 定位代码

线程死锁

jstack PID | grep -i deadlock

线程暴涨

watch -n 1 "cat /proc/PID/status | grep Threads"

如果你愿意,可以告诉我:

  • Java 版本(8 / 11 / 17)
  • 是排查 CPU 高 / 卡死 / OOM / 线程多
  • 是否是容器(Docker)

我可以给你更精确的命令。

0 踩