1、找到目标进程

可以使用ps -ef命令,通过grep关键字来找到目标进程

比如我想查看一个监控(prometheus)的进程,结果如下所示:

查看进程使用的线程数量_git

红框内即为监控的进程号

2、方法1:pstree命令

pstree -p 进程ID

结果如下截图所示:

查看进程使用的线程数量_git_02

3、方法2:查询进程ID的系统状态文件

cat /proc/进程ID/status

查看进程使用的线程数量_top命令_03

Threads的值即为当前进程所使用的线程数

4、方法3:top命令

top -p 进程ID ,然后按H

结果如下图所示:

查看进程使用的线程数量_top命令_04

5、方法4:脚本批量查询

比如某台服务器的CPU使用率飙升,通过top命令查看是​gitlab​程序占用的cpu比较大,"ps -ef|grep gitlab"发现有很多个gitlab程序,现在需要查询gitlab各个进程下的线程数情况。

for pid in $(ps -ef|grep -v grep|grep gitlab|awk '{print $2}');do echo ${pid} > /root/a.txt ;cat /proc/${pid}/status|grep Threads > /root/b.txt;paste /root/a.txt /root/b.txt;done|sort -k3 -rn

脚本释义:

1)for pid in $(ps -ef|grep -v grep|grep gitlab|awk '{print $2}')
定义${pid}变量为gitlab进程的pid号

2)echo ${pid} > /root/a.txt
将http进程的pid号都打印到/root/a.txt文件中

3)cat /proc/${pid}/status|grep Threads > /root/b.txt
将各个pid进程号下的线程信息打印到/root/b.txt文件中

4)paste /root/a.txt /root/b.txt
以列的形式展示a.txt和b/txt文件中的信息

5)sort -k3 -rn
-k3 表示以第三列进行排序
-rn 表示降序

结果如下所示:

查看进程使用的线程数量_top命令_05