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. 晨读笔记:CSS3选择器之属性选择器

    一.属性选择器 1.E[foo^="bar"]:该属性选择器描述的是选择属性以bar开头的元素,如: //所有以名称g_开头的div的字体颜色为红色div[name^=" ...

  2. 基准对象object中的基础类型----字符串 (三)

    object有如下子类: CLASSES object basestring str unicode buffer bytearray classmethod complex dict enumera ...

  3. 《App后台开发运维与架构实践》第2章 App后台基础技术

    2.1 從App業務邏輯中提煉API接口 業務邏輯思維導圖 功能-業務邏輯思維導圖 基本功能模塊關系 功能模塊接口UML(設計出API) 在設計稿標注API 編寫API文檔 2.2 設計API的要點 ...

  4. CSS实现背景透明,文字不透明(兼容所有浏览器)

    我们平时所说的调整透明度,其实在样式中是调整不透明度,如下图所示例: 打开ps,在图层面板上,可以看到设置图层整理不透明度的菜单,从 0% (完全透明)到 100%(完全不透明). 实现透明的css方 ...

  5. LOJ#6284. 数列分块入门 8

    分块的时候开一个数组标记这个区间是不是都是一样颜色的部分,如果是的话,我后面的查询,更新部分就可以直接整块操作,对于不是不全部都一样颜色的块在具体进到快里面去暴力. 在更新的时候对边上的两个不完整的块 ...

  6. htmlunit 导致高cup占用,一老内存溢出的解决办法

    原文:http://blog.csdn.net/qq_28384353/article/details/52974432#reply 将爬虫部署到服务器上运行后,在查看服务器的状态监控时发现,天猫爬虫 ...

  7. 洛谷P4390 Mokia CDQ分治

    喜闻乐见的CDQ分治被我搞的又WA又T..... 大致思路是这样的:把询问用二维前缀和的思想拆成4个子询问.然后施CDQ大法即可. 我却灵光一闪:树状数组是可以求区间和的,那么我们只拆成两个子询问不就 ...

  8. [luogu4860][Roy&October之取石子II]

    题目链接 思路 这个题和上个题类似,仔细推一下就知道这个题是判断是否是4的倍数 代码 #include<cstdio> #include<iostream> #define f ...

  9. (转)ZooKeeper的Znode剖析

    ZooKeeper的Znode剖析 https://blog.csdn.net/lihao21/article/details/51810395 根据节点的存活时间,可以对节点划分为持久节点和临时节点 ...

  10. 第二篇:用Android Studio编写Hello World

    将Android Studio的环境搭建好后,第一个写Hello World测试程序.Android Studio v3.2.1. 一.新建工程 点击Start a new Android Studi ...