前言
检查线上服务器状态,有时会发现几台机器内存占用很高。一般这种情况肯定是远程登录服务器,然后查看各个进程的内存占用。当发现某个进程占用的内存过高时,首要的检查点通常是进程创建线程的情况,以下则是 Linux 中查看进程拥有的线程的相关命令
1. ps 命令
-
ps -T p <pid>
在ps
命令中,“-T”选项可以开启线程查看。ps -T p 16241
命令输出如下,其中SPID
列即为线程的ID
。这个命令后面接上wc
即可统计进程下创建的线程总数ps -T p 16241 | wc -l
-
ps p <pid> -L -o pcpu,pmem,pid,tid,time,tname,cmd
示例命令ps p 16241 -L -o pcpu,pmem,pid,tid,time,tname,cmd
可以查看所有属于进程 16241 的线程,其中TID
列就是线程ID。同样,命令后接上wc
可以统计属于该进程的线程总数
-
pstree -p <pid>
命令pstree -pa 25393
以树形的方式显示进程 25393 创建的线程
2. top 命令
top
命令可以实时显示各个线程情况。要在top
输出中开启线程查看,可调用 top 命令的“-H”选项,该选项会列出所有 Linux 线程。在 top 运行时,也可以通过按“H”键将线程查看模式切换为开或关,打开时每一行显示的都是线程
top -H p <pid>
命令可检查该进程内运行的线程状况,示例如下。可以看到线程的总数,及每条线程的 ID 等信息
3. 查看系统文件
cat /proc/<pid>/status
命令可直接读取系统保存的进程状态文件,其中可以看到进程拥有的线程数量,及其所占用的内存大小。需注意,使用该命令要保证登录所用的账户有系统文件的访问权限