查进程线程数和CPU消耗分两步:先用cat /proc/[PID]/status或ps -o nlwp= -p [PID]确认总线程数;再用top -H -p [PID]或ps -T -p [PID] --sort=-%cpu定位高耗线程,Java进程可结合jstack分析栈。

直接看进程的线程数和各线程 CPU 消耗,关键不是只查一个数字,而是分两步:先确认线程总数,再定位高消耗线程。下面说几个常用、可靠、不依赖额外工具的方法。
查进程总线程数
最简单准确的方式是读 /proc/[PID]/status:
-
cat /proc/1234/status | grep Threads→ 输出类似Threads: 27,这就是当前线程总数 - 也可用
ps -o nlwp= -p 1234(nlwp= number of light-weight processes),结果就是纯数字,适合脚本调用 - 注意:
ps -eLf | grep 1234 | wc -l虽然也能算,但可能多计(含已退出但未回收的线程),不如前两种稳定
实时查看各线程 CPU 占用(top 方式)
想看到每个线程的 CPU 使用率,top 是最通用的选择:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 运行
top -H -p 1234:只监控 PID 为 1234 的所有线程,每行一个线程(TID),按 CPU% 实时排序 - 进入后按 P 确保按 CPU 排序,按 1 查看各 CPU 核心负载分布,有助于判断是否单核打满
- TID 就是线程 ID,在 Linux 中本质是轻量级进程 ID,和
ps -T -p 1234输出的TID列一致
一次性快照:用 ps 查线程级 CPU 排序
适合快速抓取高耗线程,不需交互:
-
ps -T -p 1234 -o pid,tid,%cpu,time,cmd --sort=-%cpu→ 显示该进程所有线程,按 %CPU 降序 -
ps -eLf --sort=-%cpu | head -10→ 查全系统 CPU 最高的前 10 个线程(含所属进程 PID) - 注意:
%cpu是采样周期内的平均值,非瞬时峰值;如需更精细统计,可用pidstat -t -p 1234 1 5(每秒采样,共 5 次)
Java 进程特别提示:结合 jstack 定位热点线程
如果目标进程是 Java 应用,查到高 CPU 线程后,可进一步分析代码栈:
- 把 TID 转成十六进制:
printf "%x\n" 12345→ 得到3039 - 用
jstack 1234 | grep "3039" -A 10(假设 1234 是 Java 进程 PID),就能看到该线程正在执行哪段代码 - 配合
top -H -p 1234和jstack,基本能锁定是死循环、频繁 GC 还是锁竞争问题

















