工作中经常遇到这样的问题:某台服务器的CPU使用率飙升,通过top命令查看是某个程序(Java)占用的CPU比较大,需要查询Java各个进程下的线程数数量。可以通过以下一组命令组合实现:
for pid in $(ps -ef | grep “java” | grep -v grep | awk '{print $2}');do echo ${pid} > /tmp/a.txt;cat /proc/${pid}/status | grep Threads > /tmp/b.txt;paste /tmp/a.txt /tmp/b.txt;
done | sort -k3 -rn
- for pid in $(ps -ef | grep “java” | grep -v grep | awk '{print $2}'):获取${pid}变量的Java进程的PID号
- echo ${pid} > /tmp/a.txt:将Java进程的PID号都打印到/tmp/a.txt文件中
- cat /proc/${pid}/status | grep Threads > /tmp/b.txt:将各个PID进程号下的线程信息打印到/tmp/b.txt文件中
- paste /tmp/a.txt /tmp/b.txt:以列的形式展示a.txt和b.txt文件中的信息
- sork -k3 -rn:对输出的信息进行排序。其中,-k3表示以第3列进行排序,-rn表示降序排列