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. HTML5获取地理位置信息

    <!DOCTYPE html> <html> <head> <title>Location</title> <meta charset ...

  2. Mac下安装MySQL(Mac 10.12)

    系统:Mac OS 10.12 MySQL:5.7.15 前言: 安装mysql有两种方式:1为官方下载dmg安装包.2为使用brew进行安装. 安装步骤: 一.官方下载dmg安装包进行安装 1.登陆 ...

  3. [WC2018]州区划分——FWT+DP+FST

    题目链接: [WC2018]州区划分 题目大意:给n个点的一个无向图,点有点权,要求将这n个点划分成若干个部分,每部分合法当且仅当这部分中所有点之间的边不能构成欧拉回路.对于一种划分方案,第i个部分的 ...

  4. SPOJ705-New Distinct Substrings-后缀数组

    计算所都不相同子串的个数,做法是所有子串的个数减去sigma(height[]).其中height数组的和便是所有相同子串的个数. 注意 N×(N+1)/2会爆int!但是最终答案在int内.所以使用 ...

  5. linux环境node服务器配置流程

    一. 安装node Node 官网已经把 linux 下载版本更改为已编译好的版本了,我们可以直接下载解压后使用: # wget https://nodejs.org/dist/v10.9.0/nod ...

  6. 缺省源和 Vim 配置

    缺省源 #include <bits/stdc++.h> #define x first #define y second #define pb push_back #define mp ...

  7. html块、含样式的标签

    html块 1.div标签 块元素,表示一块内容,没有具体的语义. 2.span标签 行内元素,表示一行中的一小段内容,没有具体的语义. 含样式和语义的标签 1.em标签 行内元素,表示语气中的强调词 ...

  8. jquery扩展写法

    如何制作自己的Jquery插件,内容参考学习了网上的讲解,如下 使用这两个方法 jQuery.fn.extend(object) jQuery.extend(object) jQuery.extend ...

  9. 【原创】hdu1698 Just a Hook(线段树→区间更新,区间查询)

    学习线段树第二天,这道题属于第二简单的线段树,第一简单是单点更新,这个属于区间更新. 区间更新就是lazy思想,我来按照自己浅薄的理解谈谈lazy思想: 就是在数据结构中,树形结构可以线性存储(线性表 ...

  10. [NOI2010]超级钢琴(RMQ+堆)

    小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙度为Ai,其中Ai可正可负 ...