Linux线程管理

本文介绍了在Linux系统中查看和分析线程的各种命令和工具,包括使用`ps`、`top`、`pstree`、`/proc`目录、`htop`、`pgrep`、`pstack`以及`jstack`等来监控和定位高CPU占用的线程。此外,还提到了`dstat`和`perf`等系统性能监控工具。对于Java应用,可以通过`jstack`生成线程 dump 文件,并使用`jtgrep`或可视化工具如Java VisualVM进行分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景

在日常系统运维工作中,遇到某个进程导致的系统运行异常,负载异常,或者想弄清某进程下有多少线程时,这时就需要查看当前的线程运行情况了,那如何查看系统的线程呢?本文将对此展开。

二、线程

1、查看指定进程的线程:

ps -T -p+进程ID

在这里插入图片描述
ps -Lf 进程ID
在这里插入图片描述

2、查看对应进程的那个线程占用CPU过高

top -H -p $PID
在这里插入图片描述

附:top快捷键
在这里插入图片描述
通过快捷键依次b ,x可高亮显示top的列找出需要的线程,默认CPU排序,Shift+< ,Shift+>可以左右移动高亮排序的列;

3、pstree工具查看

pstree命令以树状图显示进程间的关系(display a tree of processes)。ps命令可以显示当前正在运行的那些进程的信息,但是对于它们之间的关系却显示得不够清晰。在Linux系统中,系统调用fork可以创建子进程,通过子shell也可以创建子进程,Linux系统中进程之间的关系天生就是一棵树,树的根就是进程PID为1的init进程。

通过pstree清晰的看到进程的父子关系,但是进程状态查看,还是需要ps、top等命令。pstree命令是用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清楚的看出来是谁创建了谁。

如果系统没有这个命令,需要安装,执行: yum -y install psmisc //包名为:“psmisc”

eg1:显示进程之间的关系 :pstree -apnh
在这里插入图片描述
eg2:以树状图显示进程,还显示进程PID:pstree -p
eg3:显示命令和其完整参数 :pstree -a
eg4:取消合并,默认会将同名的兄弟进程合并,-c取消合并,分开显示: pstree -c

eg5:查看某进程打开的线程数:

pstree -p `jps | grep jar | awk '{print $1}'` | wc -l

在这里插入图片描述

4、直接去“/proc”对应PID的status目录查看

在Linux操作系统中,正在运行的程序都会在/proc这个目录下存放运行时文件的状态信息,因此我们在这个目录下,找到对应的进程ID就可以查看到该进程打开的线程数。当

在这里插入图片描述
或者按如下方法:
在这里插入图片描述
5、htop工具:它是top的增强版

安装:yum install -y ncurses-devel gcc  //编译htop需要安装一个编译Linux内核的库
wget http://sourceforge.net/projects/htop/files/latest/download/htop-1.0.2.tar.gz
tar -zxf htop-1.0.2.tar.gz
cd htop-1.0.2
./configure && make && make install
或者通过yum来安装;
yum install epel-release -y //使用epel源
yum install htop

在这里插入图片描述
其中有2个快捷键:

K 显示/隐藏内核线程

H 显示/隐藏用户线程

6、pgrep:

pgrep来获得正在被调度的进程的相关信息。pgrep通过匹配其程序名,找到匹配的进程。

【常用参数】:

-l 同时显示进程名和PID
-o 当匹配多个进程时,显示进程号最小的那个
-n 当匹配多个进程时,显示进程号最大的那个

7、pstack
pstack显示每个进程的栈跟踪。
安装:yum install gdb -y
在这里插入图片描述
可以看出pstack实际上只是一个指向了gstack的符号链接。

在这里插入图片描述
8、java线程分析查看

Java线程详细监控

linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步骤进行查找:

1)通过【 top -p 12377 -H】 查看java进程的有哪些线程的运行情况;再通过【jstack 12377 > stack.log】生成Java线程的dump详细信息;查看日志,找到到底是哪段具体的代码占用了如此多的资源

2)使用’jtgrep’脚本把异常线程的进程号(pid)为’num_n’的java线程在stack.log中抓出来;脚本内容如下:

#!/bin/sh
nid=`python -c  "print hex($1)" `  ##将线程对应的pid转换为16进制
grep  -i $nid $2

3)或通过 Java visualMv结合 jconsole.exe 工具即可查看:

下载:https://java.net/projects/tda/downloads/directory/visualvm
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4)或直接通过tda-bin-2.2\bin\tda.sh 来分析导出ThreadDump文件:

下载地址:https://java.net/projects/tda/downloads/directory/visualvm
在这里插入图片描述

三、附录:linux其他管理工具

1、dstat 工具

它是一个可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品;可以实时的监控cpu、磁盘、网络、IO、内存等使用情况。

官网下载地址:http://dag.wieers.com/rpm/packages/dstat

wget http://dag.wieers.com/rpm/packages/dstat/dstat-0.6.7-1.rh7.rf.noarch.rpm
rpm -ivh dstat-0.6.7-1.rh7.rf.noarch.rpm

安装完成后,就可以直接使用dstat,默认使用的是-cdngy参数,分别显示cpu、disk、net、page、system信息,默认是1s显示一条信息。可以在最后指定显示一条信息的时间间隔,如:

dstat 5 //每5s显示一条
dstat 5 10 //表每5s显示一条,一共显示10条

2、perf
perf是一款Linux性能分析工具。Linux性能计数器是一个新的基于内核的子系统,它提供一个性能分析框架,比如硬件(CPU、PMU(Performance Monitoring Unit))功能和软件(软件计数器、tracepoint)功能。=》性能剖析(performance profiling)和代码优化

默认情况下perf top是无法显示信息的,需要sudo perf top或者echo -1 > /proc/sys/kernel/perf_event_paranoid(在Ubuntu16.04,还需要echo 0 > /proc/sys/kernel/kptr_restrict)。

3、其他工具:

Linux下20个常用Linux性能监控工具/命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羌俊恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值