【调试】linux top查看线程/进程/僵尸进程

70 篇文章 18 订阅

目录

即看即用

查看进程的线程

查看主线程和新线程的关系

查找线程的父进程

详细说明

方法一:PS

方法二: Top

方法三: Htop

top、iftop、iotop、htop、atop工具区别

​​​​​​pstree命令详解

查看进程加载的库和资源占用

查看bin依赖的lib

 参考或摘取


本文随时更新,原地址:https://blog.csdn.net/bandaoyu/article/details/113697346

即看即用

查看进程的线程

1、查看某个进程的线程

ps -T -p <pid>

top -H -p <pid>

通过名字

top -H -p $(pidof name)

top -H -p $(pgrep -f name)

如果有多个同名进程,用:eval top -p $(echo $(pidof name)|tr ' ' ',')

                                           eval top -H -p $(echo $(pidof name)|tr ' ' ',')

linux命令获取进程pid:https://blog.csdn.net/weixin_39983912/article/details/111801137

只查某几个进程的信息

top -p 21538,31117,31116,31115,31114

2、查看所有的线程

top -H  

top翻页:Shift+<   上翻    Shift+> 下翻

查看主线程和新线程的关系

pstree -p 主线程id (主线程ID 就是进程ID?)

根据进程名字进行查询:

# pstree -p `ps -e | grep server | awk '{print $1}'`

# pstree -p `ps -e | grep server | awk '{print $1}'` | wc -l

查找线程的父进程

查到瓶颈线程的ID是2256592,查找其父进程

pstree -UApu|grep 2256592 -A 5 -B 10

-A 5  -B 10 表示取匹配行的前面10行和后面5行

[root@rdma59 ]# pstree -UApu|grep 2256592 -A 5 -B 10
           |-ceph-mon(2256511,ceph)-+-{ceph-mon}(2256541)
           |                        |-{ceph-mon}(2256556)
           |                        |-{ceph-mon}(2256557)
           |                        |-{ceph-mon}(2256558)
           |                        |-{ceph-mon}(2256563)
           |                        |-{ceph-mon}(2256564)
           |                        |-{ceph-mon}(2256565)
           |                        |-{ceph-mon}(2256589)
           |                        |-{ceph-mon}(2256590)
           |                        |-{ceph-mon}(2256591)
           |                        |-{ceph-mon}(2256592)
           |                        |-{ceph-mon}(2256593)
           |                        |-{ceph-mon}(2256594)
           |                        |-{ceph-mon}(2256595)
           |                        |-{ceph-mon}(2256596)
           |                        |-{ceph-mon}(2256597)

可以看出,线程2256592  由ceph-mon(2256511)创建

查看僵尸进程和父进程

 ps -A -ostat,ppid,pid,cmd |grep -e '^[Zz]'

[root@node127 ~]# ps -A -ostat,ppid,pid,cmd |grep -e '^[Zz]'
Z 751687 788527 [bash] <defunct>
Z 751687 790925 [df] <defunct>
Z 751687 790926 [grep] <defunct>
Z 751687 790927 [awk] <defunct>
Z 751687 795419 [df] <defunct>
Z 751687 795420 [grep] <defunct>
Z 751687 795421 [awk] <defunct>
Z 751687 796526 [df] <defunct>
Z 751687 796527 [grep] <defunct>
Z 751687 796528 [awk] <defunct>

详细说明

技术|Linux有问必答:Linux上如何查看某个进程的线程

方法一:PS

在ps命令中,“-T”选项可以开启线程查看。下面的命令列出了由进程号为<pid>的进程创建的所有线程。

  1. $ ps -T -p <pid>

“SID”栏表示线程ID,而“CMD”栏则显示了线程名称。

 你可以用 ps -eLf |grep XXX 来查看程序运行所产生的线程情况;  也可以用 ps axms | grep XXX;

ps 命令对特定资源行排序

比如透过 CPU 使用率:

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu

方法二: Top

top命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有Linux线程。在top运行时,你也可以通过按“H”键将线程查看模式切换为开或关。

  1. $ top -H

要让top输出某个特定进程<pid>并检查该进程内运行的线程状况:

 
  1. $ top -H -p <pid>

方法三: Htop

一个对用户更加友好的方式是,通过htop查看单个进程的线程,它是一个基于ncurses的交互进程查看器。该程序允许你在树状视图中监控单个独立线程。

要在htop中启用线程查看,请开启htop,然后按<F2>来进入htop的设置菜单。选择“设置”栏下面的“显示选项”,然后开启“树状视图”和“显示自定义线程名”选项。按<F10>退出设置。

现在,你就会看到下面这样单个进程的线程视图。


via: How to view threads of a process on Linux

perf top 函数性能分析

使用 perf top 可以查看某个进程的耗时百分比分布,从而知道哪些函数比较耗时:

server_name="xsearch_leaf_kdweibocrawler"
pid=`pidof $server_name`
echo $pid
perf top -p $pid

打印函数调用链的性能占比

perf record -F 99 -p ${pid} --call-graph dwarf sleep ${采样时间}

执行perf report可以看到各个子函数性能占比。

查看修改进程打开文件数上限

1. 查看进程打开的文件

/proc/${pid}/fd

fd目录下面的文件数就是打开的文件数量。fd下面的文件是连接,链接到实际的文件描述符。


2. 修改进程打开文件数上限
 默认上限是1024个,可以通过ulimit -n查看。

修改/etc/security/limits.conf文件改变:
* soft nofile 65535       #软限制,可增长至hard 限制
* hard nofile 65535     #一旦设置,非root用户不能修改

还可以只真对某个用户或某个组做修改,具体方法参见文件注释。修改后需要重新启动系统才能生效。

*说明:在/proc下,对应每个进程有一个以进程号命名的目录,该目录下有一个fd目录,该目录下面的每个文件是一个符号连接,其文件名对应该进程占用的一个文件描述符,而连接指向的内容表示文件描述符对应的实际文件。

top、iftop、iotop、htop、atop工具区别

top、iftop、iotop、htop、atop工具:https://blog.csdn.net/bandaoyu/article/details/95407670

​​​​​​pstree命令详解

pstree命令是用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清楚的看出来是谁创建了谁
#pstree
几个重要的参数:
-A: 各进程树之间的连接以ASCII码字符来连接
-U:各进程树之间的连接以utf8字符来连接,某些终端可能会有错误
-p:同时列出每个进程的PID
-u: 同时列出每个进程的所属账号名称:
例子:
#pstree  -up


可以看到所有的进程都是依附在systemd这个进程下面,它的进程PID是1,因为它是由Linux内核主动调用的一个进程。

可以从中看出来进程所属的用户为dlj,每个进程的pid
而且,25707这个进程有5个子进程,分别为25778,25779,25780,25782,25787
25778这个进程也有几个子线程,分别为,25781,25783,25784,27547,27548

查看进程加载的库和资源占用

ps -aux |pingpong   查进程ID

lsof -p 1957209      查加载的库和资源占用:

[root@node11 ~]# ps -aux |grep pingpong
root     1957209  0.0  0.0  11708  1968 pts/0    S+   23:22   0:00 fi_pingpong -d mlx5_1 -p verbs;ofi_rxm -e rdm -v
root     1961354  0.0  0.0   6412  2296 pts/2    S+   23:22   0:00 grep --color=auto pingpong
[root@node11 ~]# lsof -p 1957209
COMMAND       PID USER   FD   TYPE    DEVICE SIZE/OFF      NODE NAME
fi_pingpo 1957209 root  cwd    DIR     253,0      187 134289536 /home
fi_pingpo 1957209 root  rtd    DIR     253,0      247       128 /
fi_pingpo 1957209 root  txt    REG     253,0    50040       815 /usr/bin/fi_pingpong
fi_pingpo 1957209 root  mem    REG     253,0    54392  67564400 /usr/lib64/libnuma.so.1.0.0
fi_pingpo 1957209 root  mem    REG     253,0   108136  67109001 /usr/lib64/libgcc_s-11-20220127.so.1
fi_pingpo 1957209 root  mem    REG     253,0  2389488  67111325 /usr/lib64/libc.so.6
fi_pingpo 1957209 root  mem    REG     253,0    15936  67111327 /usr/lib64/libdl.so.2
fi_pingpo 1957209 root  mem    REG     253,0    15952  67111333 /usr/lib64/libpthread.so.0
fi_pingpo 1957209 root  mem    REG     253,0    16648  67111335 /usr/lib64/librt.so.1
fi_pingpo 1957209 root  mem    REG     253,0   443384  67713500 /usr/lib64/libpsm2.so.2.2
fi_pingpo 1957209 root  mem    REG     253,0   552152  67111912 /usr/lib64/libnl-route-3.so.200.26.0
fi_pingpo 1957209 root  mem    REG     253,0   146872  67111904 /usr/lib64/libnl-3.so.200.26.0
fi_pingpo 1957209 root  mem    REG     253,0   138856  67112779 /usr/lib64/libibverbs.so.1.14.37.2
fi_pingpo 1957209 root  mem    REG     253,0   109752  67453439 /usr/lib64/librdmacm.so.1.3.35.0
fi_pingpo 1957209 root  mem    REG     253,0  1363688  67713565 /usr/lib64/libfabric.so.1.17.0_bak
fi_pingpo 1957209 root  mem    REG     253,0   909264  67111321 /usr/lib64/ld-linux-x86-64.so.2
fi_pingpo 1957209 root    0u   CHR     136,0      0t0         3 /dev/pts/0
fi_pingpo 1957209 root    1u   CHR     136,0      0t0         3 /dev/pts/0
fi_pingpo 1957209 root    2u   CHR     136,0      0t0         3 /dev/pts/0
fi_pingpo 1957209 root    3u  IPv4 597221140      0t0       TCP *:47592 (LISTEN)

查看bin依赖的lib

ldd  exe_nam

 参考或摘取

https://www.cnblogs.com/EasonJim/p/8098217.html

pstree命令详解 - 马昌伟 - 博客园

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值