Linux下查看线程数的几种方法汇总

                                           作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.Linux下查看某个进程的线程数量

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

1>.安装pstree命令行工具,包名为:“psmisc”

[root@yinzhengjie bin]# yum -y install psmisc
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package psmisc.x86_64 :22.20-.el7 will be installed
--> Finished Dependency Resolution Dependencies Resolved ====================================================================================================================================================================
Package Arch Version Repository Size
====================================================================================================================================================================
Installing:
psmisc x86_64 22.20-.el7 base k Transaction Summary
====================================================================================================================================================================
Install Package Total download size: k
Installed size: k
Downloading packages:
psmisc-22.20-.el7.x86_64.rpm | kB ::
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : psmisc-22.20-.el7.x86_64 /
Verifying : psmisc-22.20-.el7.x86_64 / Installed:
psmisc.x86_64 :22.20-.el7 Complete!
[root@yinzhengjie bin]#

[root@yinzhengjie bin]# yum -y install psmisc

2>.相关参数介绍

Usage: pstree [ -a ] [ -c ] [ -h | -H PID ] [ -l ] [ -n ] [ -p ] [ -g ] [ -u ]
[ -A | -G | -U ] [ PID | USER ]
pstree -V
Display a tree of processes. -a, --arguments       显示命令时候,并显示其参数的完整内容 -A, --ascii   各进程树之间的连接以ASCII码字符来连接 -c, --compact     取消同名兄弟进程的合并(默认会将同名的兄弟进程合并) -h, --highlight-all      突出当前进程及其祖先
-H PID, --highlight-pid=PID       突出这个过程和它的祖先 -g, --show-pgids       显示进程组ID; -G, --vt100     使用VT100线绘制字符 -l, --long     不要截断长线。 -n, --numeric-sort       用PID排序输出
-N type,
--ns-sort=type       sort by namespace type (ipc, mnt, net, pid, user, uts) -p, --show-pids       同时列出每个进程的PID -s, --show-parents       显示选定过程的父母 -S, --ns-changes       显示命名空间转换

 -u, --uid-changes       同时列出每个进程的所属账号名称 -U, --unicode     各进程树之间的连接以utf8字符来连接,某些终端可能会有错误 -V, --version     显示版本信息
-Z,
--security-context       显示SELinux的安全上下文 PID        从这个PID开始;默认值是1(init)。 USER         只显示在该用户的进程中的树

3>.案例1-显示进程之间的关系

[root@yinzhengjie bin]# pstree -apnh
systemd, --switched-root --system --deserialize
├─systemd-journal,
├─systemd-udevd,
├─lvmetad, -f
├─auditd,
│ └─{auditd},
├─irqbalance, --foreground
├─systemd-logind,
├─polkitd, --no-debug
│ ├─{polkitd},
│ ├─{polkitd},
│ ├─{polkitd},
│ ├─{polkitd},
│ └─{polkitd},
├─dbus-daemon, --system --address=systemd: --nofork --nopidfile --systemd-activation
├─NetworkManager, --no-daemon
│ ├─{NetworkManager},
│ └─{NetworkManager},
├─crond, -n
├─chronyd,
├─agetty, --noclear tty1 linux
├─sshd, -D
│ ├─sshd,
│ │ └─bash,
│ │ └─pstree, -apnh
│ └─sshd,
│ └─bash,
├─tuned, -Es /usr/sbin/tuned -l -P
│ ├─{tuned},
│ ├─{tuned},
│ ├─{tuned},
│ └─{tuned},
├─gmetad, -d
│ ├─{gmetad},
│ ├─{gmetad},
│ ├─{gmetad},
│ ├─{gmetad},
│ ├─{gmetad},
│ ├─{gmetad},
│ ├─{gmetad},
│ └─{gmetad},
├─httpd, -DFOREGROUND
│ ├─httpd, -DFOREGROUND
│ ├─httpd, -DFOREGROUND
│ ├─httpd, -DFOREGROUND
│ ├─httpd, -DFOREGROUND
│ └─httpd, -DFOREGROUND
├─rsyslogd, -n
│ ├─{rsyslogd},
│ └─{rsyslogd},
├─zabbix_agentd, -c /etc/zabbix/zabbix_agentd.conf
│ ├─zabbix_agentd,
│ ├─zabbix_agentd,
│ ├─zabbix_agentd,
│ ├─zabbix_agentd,
│ └─zabbix_agentd,
├─gmond,
│ └─{gmond},
└─java, -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp/soft/zk/bin/../build/classes:/soft/zk/bin/../build/lib/*.jar:/soft/zk/bin/../lib/
├─{java},2487
├─{java},2488
├─{java},2489
├─{java},2490
├─{java},2491
├─{java},2492
├─{java},2493
├─{java},2494
├─{java},2495
├─{java},2496
├─{java},2497
├─{java},2498
├─{java},2499
├─{java},2500
├─{java},2501
├─{java},2502
├─{java},2503
├─{java},2504
├─{java},2505
├─{java},2506
├─{java},2507
├─{java},2508
├─{java},2509
├─{java},2510
├─{java},2511
├─{java},2512
├─{java},2513
├─{java},2514
├─{java},2515
├─{java},2516
├─{java},2517
├─{java},2518
├─{java},2519
├─{java},2520
├─{java},2521
├─{java},2522
├─{java},2523
├─{java},2524
├─{java},2525
├─{java},2526
├─{java},2527
├─{java},2528
├─{java},2529
├─{java},2530
├─{java},2531
├─{java},2532
├─{java},2534
├─{java},2535
├─{java},2536
├─{java},2537
├─{java},2538
├─{java},2539
├─{java},2540
├─{java},2541
├─{java},2542
├─{java},2543
├─{java},2544
├─{java},2545
├─{java},2546
├─{java},2547
├─{java},2548
└─{java},2549
[root@yinzhengjie bin]#

[root@yinzhengjie bin]# pstree -apnh

4>.案例2-以树状图显示进程,还显示进程PID

[root@yinzhengjie bin]# pstree -p
systemd()─┬─NetworkManager()─┬─{NetworkManager}()
│ └─{NetworkManager}()
├─agetty()
├─auditd()───{auditd}()
├─chronyd()
├─crond()
├─dbus-daemon()
├─gmetad()─┬─{gmetad}()
│ ├─{gmetad}()
│ ├─{gmetad}()
│ ├─{gmetad}()
│ ├─{gmetad}()
│ ├─{gmetad}()
│ ├─{gmetad}()
│ └─{gmetad}()
├─gmond()───{gmond}()
├─httpd()─┬─httpd()
│ ├─httpd()
│ ├─httpd()
│ ├─httpd()
│ └─httpd()
├─irqbalance()
├─java()─┬─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ ├─{java}()
│ └─{java}()
├─lvmetad()
├─polkitd()─┬─{polkitd}()
│ ├─{polkitd}()
│ ├─{polkitd}()
│ ├─{polkitd}()
│ └─{polkitd}()
├─rsyslogd()─┬─{rsyslogd}()
│ └─{rsyslogd}()
├─sshd()─┬─sshd()───bash()───pstree()
│ └─sshd()───bash()
├─systemd-journal()
├─systemd-logind()
├─systemd-udevd()
├─tuned()─┬─{tuned}()
│ ├─{tuned}()
│ ├─{tuned}()
│ └─{tuned}()
└─zabbix_agentd()─┬─zabbix_agentd()
├─zabbix_agentd()
├─zabbix_agentd()
├─zabbix_agentd()
└─zabbix_agentd()
[root@yinzhengjie bin]#

[root@yinzhengjie bin]# pstree -p

5>.案例3-显示命令和其完整参数

[root@yinzhengjie bin]# pstree -a
systemd --switched-root --system --deserialize
├─NetworkManager --no-daemon
│ └─*[{NetworkManager}]
├─agetty --noclear tty1 linux
├─auditd
│ └─{auditd}
├─chronyd
├─crond -n
├─dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
├─gmetad -d
│ └─*[{gmetad}]
├─gmond
│ └─{gmond}
├─httpd -DFOREGROUND
│ ├─httpd -DFOREGROUND
│ ├─httpd -DFOREGROUND
│ ├─httpd -DFOREGROUND
│ ├─httpd -DFOREGROUND
│ └─httpd -DFOREGROUND
├─irqbalance --foreground
├─java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp/soft/zk/bin/../build/classes:/soft/zk/bin/../build/lib/*.jar:/soft/zk/bin/../lib/
│ └─62*[{java}]
├─lvmetad -f
├─polkitd --no-debug
│ └─5*[{polkitd}]
├─rsyslogd -n
│ └─2*[{rsyslogd}]
├─sshd -D
│ ├─sshd
│ │ └─bash
│ │ └─pstree -a
│ └─sshd
│ └─bash
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned -Es /usr/sbin/tuned -l -P
│ └─4*[{tuned}]
└─zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
├─zabbix_agentd
├─zabbix_agentd
├─zabbix_agentd
├─zabbix_agentd
└─zabbix_agentd
[root@yinzhengjie bin]#

[root@yinzhengjie bin]# pstree -a

6>.案例4-取消合并,默认会将同名的兄弟进程合并,-c取消合并,分开显示

[root@yinzhengjie bin]# pstree -c
systemd─┬─NetworkManager─┬─{NetworkManager}
│ └─{NetworkManager}
├─agetty
├─auditd───{auditd}
├─chronyd
├─crond
├─dbus-daemon
├─gmetad─┬─{gmetad}
│ ├─{gmetad}
│ ├─{gmetad}
│ ├─{gmetad}
│ ├─{gmetad}
│ ├─{gmetad}
│ ├─{gmetad}
│ └─{gmetad}
├─gmond───{gmond}
├─httpd─┬─httpd
│ ├─httpd
│ ├─httpd
│ ├─httpd
│ └─httpd
├─irqbalance
├─java─┬─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ ├─{java}
│ └─{java}
├─lvmetad
├─polkitd─┬─{polkitd}
│ ├─{polkitd}
│ ├─{polkitd}
│ ├─{polkitd}
│ └─{polkitd}
├─rsyslogd─┬─{rsyslogd}
│ └─{rsyslogd}
├─sshd─┬─sshd───bash───pstree
│ └─sshd───bash
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned─┬─{tuned}
│ ├─{tuned}
│ ├─{tuned}
│ └─{tuned}
└─zabbix_agentd─┬─zabbix_agentd
├─zabbix_agentd
├─zabbix_agentd
├─zabbix_agentd
└─zabbix_agentd
[root@yinzhengjie bin]#

[root@yinzhengjie bin]# pstree -c  

7>.案例5-查询zookeeper进程打开的线程数

[root@yinzhengjie bin]# jps
QuorumPeerMain
Jps
[root@yinzhengjie bin]#
[root@yinzhengjie bin]#
[root@yinzhengjie bin]# pstree -p `jps | grep QuorumPeerMain | awk '{print $1}'` | wc -l [root@yinzhengjie bin]#
[root@yinzhengjie bin]#
[root@yinzhengjie bin]# pstree -p | wc -l [root@yinzhengjie bin]#

总结:

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

  推荐学习的博客:http://www.runoob.com/linux/linux-command-manual.html

二.使用top命令查看

1>.使用pstree命令查看"ResourceManager"进程打开的线程数

[root@yinzhengjie ~]# jps
Jps
ResourceManager
JobTracker
NameNode
Bootstrap
DFSZKFailoverController
HistoryServer
HistoryServer
JobHistoryServer
[root@yinzhengjie ~]#
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# pstree -p | wc -l [root@yinzhengjie ~]#

2>.使用top命令查看“ResourceManager”打开的进程数

[root@yinzhengjie ~]# top -H -p
top - :: up days, :, users, load average: 0.02, 0.06, 0.05
Threads: total, running, sleeping, stopped, zombie
%Cpu(s): 0.1 us, 0.0 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : total, free, used, buff/cache
KiB Swap: total, free, used. avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
yarn S 0.3 3.4 :15.83 java
yarn S 0.0 3.4 :00.25 java
yarn S 0.0 3.4 :03.12 java
yarn S 0.0 3.4 :01.65 java
yarn S 0.0 3.4 :01.65 java
yarn S 0.0 3.4 :01.69 java
yarn S 0.0 3.4 :01.66 java
yarn S 0.0 3.4 :01.70 java
yarn S 0.0 3.4 :01.69 java
yarn S 0.0 3.4 :01.67 java
yarn S 0.0 3.4 :01.68 java
yarn S 0.0 3.4 :01.68 java
yarn S 0.0 3.4 :01.67 java
yarn S 0.0 3.4 :01.70 java
yarn S 0.0 3.4 :01.68 java
yarn S 0.0 3.4 :01.66 java
yarn S 0.0 3.4 :01.67 java
yarn S 0.0 3.4 :01.69 java
yarn S 0.0 3.4 :00.00 java
yarn S 0.0 3.4 :00.00 java
yarn S 0.0 3.4 :00.00 java
yarn S 0.0 3.4 :00.00 java
yarn S 0.0 3.4 :15.73 java
yarn S 0.0 3.4 :59.54 java
yarn S 0.0 3.4 :00.06 java
yarn S 0.0 3.4 :00.04 java
yarn S 0.0 3.4 :00.00 java
yarn S 0.0 3.4 :00.00 java
yarn S 0.0 3.4 :08.24 java
[root@yinzhengjie ~]#

[root@yinzhengjie ~]# top -H -p 10339

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

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

[root@yinzhengjie ~]# cat /proc//status
Name: java
Umask:
State: S (sleeping)
Tgid:
Ngid:
Pid:
PPid:
TracerPid:
Uid:
Gid:
FDSize:
Groups:
VmPeak: kB
VmSize: kB
VmLck: kB
VmPin: kB
VmHWM: kB
VmRSS: kB
RssAnon: kB
RssFile: kB
RssShmem: kB
VmData: kB
VmStk: kB
VmExe: kB
VmLib: kB
VmPTE: kB
VmSwap: kB
Threads:
SigQ: /
SigPnd:
ShdPnd:
SigBlk:
SigIgn:
SigCgt: 2000000181005ccf
CapInh:
CapPrm:
CapEff:
CapBnd: 0000001fffffffff
CapAmb:
Seccomp:
Cpus_allowed: fffff
Cpus_allowed_list: -
Mems_allowed: ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Mems_allowed_list: -
voluntary_ctxt_switches:
nonvoluntary_ctxt_switches:
[root@yinzhengjie ~]#

[root@yinzhengjie ~]# cat /proc/10339/status

四.直接去“/proc”对应PID的task目录查看

[root@yinzhengjie ~]# jps
Jps
ResourceManager
JobTracker
NameNode
Bootstrap
DFSZKFailoverController
HistoryServer
HistoryServer
JobHistoryServer
[root@yinzhengjie ~]#
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# pstree -p | wc -l [root@yinzhengjie ~]#
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# ll /proc//task/ | wc -l [root@yinzhengjie ~]#
[root@yinzhengjie ~]#

Linux下查看线程数的几种方法汇总的更多相关文章

  1. linux下查看线程数的几种方法

    1. cat /proc/${pid}/status 2.pstree -p ${pid} 3.top -p ${pid} 再按H   或者直接输入 top -bH -d 3 -p  ${pid} t ...

  2. Linux环境下查看线程数的几种方法

    1.cat /proc/${pid}/status 2.pstree -p ${pid} 3.top -p ${pid} 再按H,或者直接输入 top -bH -d 3 -p  ${pid} top ...

  3. [转]Linux环境下查看线程数的几种方法

    1.cat /proc/${pid}/status 2.pstree -p ${pid} 3.top -p ${pid} 再按H,或者直接输入 top -bH -d 3 -p  ${pid} top ...

  4. Linux下查看磁盘挂载的几种方法

    Linux下查看磁盘挂载的几种方法 第一种方法:df命令 # df -hT Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtm ...

  5. Linux下查看磁盘挂载的三种方法

    Linux下查看磁盘挂载的三种方法 2009-06-05 23:17 好久没有更新日志了,呵呵.不是没有要写的东东.实在抽不出时间来写,要准备公司的考试呢,C++考试.已经有七个月没有写C++代码了, ...

  6. linux下查看mysql版本的四种方法

    Linux查看MySQL版本的四种方法 1 在终端下执行 mysql -V 2 在help中查找 mysql --help |grep Distrib 3 在mysql 里查看 select vers ...

  7. linux 下查看系统内存使用情况的方法

    在Windows系统中查看内存的使用情况很简单,想必大家都已经耳熟能详了,那么在linux系统如何查看内存使用情况呢?下面和大家分享在Linux 下查看内存使用情况的free命令: [root@scs ...

  8. [转] linux 下查看一个进程运行路径的方法

    http://blog.csdn.net/brioxu/article/details/5104736 在linux下查看进程大家都会想到用 ps -ef|grep XXX ps -aux | hea ...

  9. linux下查看进城(ps)的方法 与 杀死进程(kill)的N种方法

    PS查看进程 inux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必 ...

随机推荐

  1. Vue——轻松实现vue底部点击加载更多

    前言 需求总是不断改变的,好吧,今天就把vue如何实现逐步加载更多和分布加载更多说下,默认你知道如何去请求数据的哈 一次请求 页面 使用slice来进行限制展现从0,a的数据 <div v-fo ...

  2. HDU4292-Food-网络流

    裸网络流题. #include <cstdio> #include <algorithm> #include <cstring> #include <queu ...

  3. F - Count the Colors ZOJ - 1610 线段树染色(染区间映射)

    题意:给一段0-8000的线段染色 问最后 颜色x 有几段 题解:标准线段树  但是没有push_up  最后查询是单点按顺序查询每一个点 考虑过使用区间来维护不同的线段有多少种各色的线段  思路是 ...

  4. Paths on a Grid POJ - 1942 组合数学 (组合数的快速计算)

    题意:格路问题 没什么难度 难点在于如何快速计算相对较大的组合数 思路:运用手写计算组合数的方式进行计算  如c(8,3) 如果手算就是   8*7*6/(3*2*1)这样可以很快得解出 计算代码为: ...

  5. BZOJ 1977 严格次小生成树(算竞进阶习题)

    树上倍增+kruskal 要找严格次小生成树,肯定先要找到最小生成树. 我们先把最小生成树的边找出来建树,然后依次枚举非树边,容易想到一种方式: 对于每条非树边(u,v),他会与树上的两个点构成环,我 ...

  6. YC的基本创业建议

    原文出处:https://blog.ycombinator.com/ycs-essential-startup-advice/ 我们给初创公司的许多建议都是战术性的; 意味着在日常或周到周的基础上有所 ...

  7. 【HDU - 4341】Gold miner(分组背包)

    BUPT2017 wintertraining(15) #8B 题意 给出每个黄金的坐标.价值及耗时,同一方向的黄金只能依次取,求T时间内收获的最大值. 题解 同一方向,物品前缀和构成的组合,相当于是 ...

  8. JXOI2017颜色

    题面 loj 分析 这道题非常妙啊 对于可保留区间[l, r] 枚举右端点r 考虑l的取值范围有两重约数 记颜色i出现的最右侧位置是\(max_i\) 最左侧位置是\(min_i\) r前最后一次出现 ...

  9. ssh 免密root登录

    安装SSH SERVER 在所有的节点上都安装SSH server服务. # apt-get install openssh-server1 因为我们搭建的Ceph直接使用root用户,所以需要修改s ...

  10. 「SCOI2015」小凸玩密室 解题报告

    「SCOI2015」小凸玩密室 虽然有心里在想一些奇奇怪怪的事情的原因,不过还是写太久了.. 不过这个题本身也挺厉害的 注意第一个被点亮的是任意选的,我最开始压根没注意到 \(dp_{i,j}\)代表 ...