目录
本文随时更新,原地址: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>的进程创建的所有线程。
$ 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”键将线程查看模式切换为开或关。
$ top -H
要让top输出某个特定进程<pid>并检查该进程内运行的线程状况:
$ 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