1、找到目标进程
可以使用ps -ef命令,通过grep关键字来找到目标进程
比如我想查看一个监控(prometheus)的进程,结果如下所示:
红框内即为监控的进程号
2、方法1:pstree命令
pstree -p 进程ID
结果如下截图所示:
3、方法2:查询进程ID的系统状态文件
cat /proc/进程ID/status
Threads的值即为当前进程所使用的线程数
4、方法3:top命令
top -p 进程ID ,然后按H
结果如下图所示:
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 表示降序
结果如下所示: