r2 - 11 May 2009 - 09:36:23 - Main.yfangYou are here: YWiki >  MyTech Web > 如何查看系统中的线程

如何查看系统中的线程

前言

  • 做这件事情是有初衷的,我有一台CentOS5的Server上跑OpenVz虚拟机,其中有一台虚拟机工作不正常,最终查到的原因是线程数被限制的太低了,导致里面的服务起不来,在OpenVz的主机上可以通过下面的命令查看到虚拟机(ID 101)的状态
# vzctl exec 101 cat /proc/user_beancounters|grep numproc
# 或者直接在101这台虚拟机上执行 cat /proc/user_beancounters|grep numproc,结果一样
#         resource                     held              maxheld              barrier                limit              failcnt
            numproc                        123                  600                 600                 600                  55
  • 注意到第一行123,实际就是当前虚拟机的线程总数。然而这个user_beancounters文件是vz独有的,对于一般的CentOS主机,并没有这种文件可以查看,下面就是几种查看普通机器线程总数的方式,很简单,仅仅为了做下笔记。

ps

# ps 提供了 -eLf 查看线程状态
root@localhost[0]~15:55:11# ps -eLf
UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
root         1     0     1  0    1 08:45 ?        00:00:01 init [3]
root         2     1     2  0    1 08:45 ?        00:00:00 [migration/0]
root         3     1     3  0    1 08:45 ?        00:00:00 [ksoftirqd/0]
root         4     1     4  0    1 08:45 ?        00:00:00 [watchdog/0]
root         5     1     5  0    1 08:45 ?        00:00:00 [events/0]
root         6     1     6  0    1 08:45 ?        00:00:00 [khelper]
root         7     1     7  0    1 08:45 ?        00:00:00 [kthread]
root        10     7    10  0    1 08:45 ?        00:00:00 [kblockd/0]
root        11     7    11  0    1 08:45 ?        00:00:00 [kacpid]
root       170     7   170  0    1 08:45 ?        00:00:00 [cqueue/0]
root       173     7   173  0    1 08:45 ?        00:00:00 [khubd]
root       175     7   175  0    1 08:45 ?        00:00:00 [kseriod]
root       237     7   237  0    1 08:45 ?        00:00:00 [pdflush]
root       238     7   238  0    1 08:45 ?        00:00:01 [pdflush]
root       239     7   239  0    1 08:45 ?        00:00:00 [kswapd0]
root       240     7   240  0    1 08:45 ?        00:00:00 [aio/0]
root       457     7   457  0    1 08:45 ?        00:00:00 [kpsmoused]
root       487     7   487  0    1 08:45 ?        00:00:00 [mpt_poll_0]
root       488     7   488  0    1 08:45 ?        00:00:00 [scsi_eh_0]
root       491     7   491  0    1 08:45 ?        00:00:00 [ata/0]
root       492     7   492  0    1 08:45 ?        00:00:00 [ata_aux]
root       499     7   499  0    1 08:45 ?        00:00:00 [kstriped]
root       508     7   508  0    1 08:45 ?        00:00:07 [kjournald]
root       540     7   540  0    1 08:45 ?        00:00:00 [kauditd]
root       574     1   574  0    1 08:45 ?        00:00:01 /sbin/udevd -d
root      1710     7  1710  0    1 08:46 ?        00:00:00 [kmpathd/0]
root      1711     7  1711  0    1 08:46 ?        00:00:00 [kmpath_handlerd]
root      2022     1  2022  0    1 08:46 ?        00:00:00 mcstransd
root      2262     1  2262  0    2 08:46 ?        00:00:00 auditd
root      2262     1  2263  0    2 08:46 ?        00:00:00 auditd
root      2264  2262  2264  0    2 08:46 ?        00:00:00 /sbin/audispd
root      2264  2262  2273  0    2 08:46 ?        00:00:00 /sbin/audispd
root      2286     1  2286  0    1 08:46 ?        00:00:00 /usr/sbin/restorecond
root      2301     1  2301  0    1 08:46 ?        00:00:00 syslogd -m 0
root      2304     1  2304  0    1 08:47 ?        00:00:00 klogd -x
rpc       2341     1  2341  0    1 08:47 ?        00:00:00 portmap
root      2370     1  2370  0    1 08:47 ?        00:00:00 rpc.statd
root      2411     7  2411  0    1 08:47 ?        00:00:00 [rpciod/0]
root      2418     1  2418  0    1 08:47 ?        00:00:00 rpc.idmapd
dbus      2445     1  2445  0    2 08:47 ?        00:00:00 dbus-daemon --system
dbus      2445     1  2446  0    2 08:47 ?        00:00:00 dbus-daemon --system
root      2461     1  2461  0    1 08:47 ?        00:00:00 /usr/sbin/hcid
root      2465     1  2465  0    1 08:47 ?        00:00:00 /usr/sbin/sdpd
root      2485     1  2485  0    1 08:47 ?        00:00:00 [krfcommd]
root      2537     1  2537  0    2 08:47 ?        00:00:00 pcscd
root      2537     1  2555  0    2 08:47 ?        00:00:00 pcscd
root      2560     1  2560  0    1 08:47 ?        00:00:00 /usr/bin/hidd --server
root      2582     1  2582  0    5 08:47 ?        00:00:00 automount
root      2582     1  2583  0    5 08:47 ?        00:00:00 automount
root      2582     1  2584  0    5 08:47 ?        00:00:00 automount
root      2582     1  2587  0    5 08:47 ?        00:00:00 automount
root      2582     1  2590  0    5 08:47 ?        00:00:00 automount
root      2623     1  2623  0    1 08:47 ?        00:00:00 /usr/sbin/acpid
root      2652     1  2652  0    1 08:47 ?        00:00:00 /usr/sbin/sshd
root      2690     1  2690  0    1 08:47 ?        00:00:00 cupsd
root      2706     1  2706  0    1 08:47 ?        00:00:00 xinetd -stayalive -pidfile /var/run/xinet
root      2741     1  2741  0    1 08:47 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/v
mysql     2798  2741  2798  0   11 08:47 ?        00:00:00 /usr/libexec/mysqld --basedir=/usr --data
mysql     2798  2741  2804  0   11 08:47 ?        00:00:00 /usr/libexec/mysqld --basedir=/usr --data
mysql     2798  2741  2805  0   11 08:47 ?        00:00:00 /usr/libexec/mysqld --basedir=/usr --data
mysql     2798  2741  2806  0   11 08:47 ?        00:00:00 /usr/libexec/mysqld --basedir=/usr --data
mysql     2798  2741  2807  0   11 08:47 ?        00:00:00 /usr/libexec/mysqld --basedir=/usr --data
mysql     2798  2741  2812  0   11 08:47 ?        00:00:00 /usr/libexec/mysqld --basedir=/usr --data
mysql     2798  2741  2813  0   11 08:47 ?        00:00:00 /usr/libexec/mysqld --basedir=/usr --data
mysql     2798  2741  2814  0   11 08:47 ?        00:00:00 /usr/libexec/mysqld --basedir=/usr --data
mysql     2798  2741  2817  0   11 08:47 ?        00:00:00 /usr/libexec/mysqld --basedir=/usr --data
mysql     2798  2741  2818  0   11 08:47 ?        00:00:00 /usr/libexec/mysqld --basedir=/usr --data
mysql     2798  2741  3201  0   11 08:48 ?        00:00:07 /usr/libexec/mysqld --basedir=/usr --data
root      2844     1  2844  0    1 08:47 ?        00:00:00 sendmail: accepting connections
smmsp     2853     1  2853  0    1 08:47 ?        00:00:00 sendmail: Queue runner@01:00:00 for /var/
root      2869     1  2869  0    1 08:47 ?        00:00:00 gpm -m /dev/input/mice -t exps2
root      2885     1  2885  0    1 08:47 ?        00:00:01 /usr/sbin/httpd
root      2900     1  2900  0    1 08:47 ?        00:00:00 crond
apache    2934  2885  2934  0    1 08:47 ?        00:00:00 /usr/sbin/httpd
apache    2935  2885  2935  0    1 08:47 ?        00:00:00 /usr/sbin/httpd
apache    2936  2885  2936  0    1 08:47 ?        00:00:00 /usr/sbin/httpd
apache    2937  2885  2937  0    1 08:47 ?        00:00:00 /usr/sbin/httpd
apache    2938  2885  2938  0    1 08:47 ?        00:00:00 /usr/sbin/httpd
apache    2939  2885  2939  0    1 08:47 ?        00:00:00 /usr/sbin/httpd
apache    2940  2885  2940  0    1 08:47 ?        00:00:00 /usr/sbin/httpd
apache    2941  2885  2941  0    1 08:47 ?        00:00:00 /usr/sbin/httpd
xfs       2945     1  2945  0    1 08:47 ?        00:00:00 xfs -droppriv -daemon
ntop      2960     1  2960  0   10 08:47 ?        00:00:00 ntop @/etc/ntop.conf -d -L
ntop      2960     1  2986  0   10 08:47 ?        00:00:00 ntop @/etc/ntop.conf -d -L
ntop      2960     1  2987  0   10 08:47 ?        00:00:00 ntop @/etc/ntop.conf -d -L
ntop      2960     1  2988  0   10 08:47 ?        00:00:00 ntop @/etc/ntop.conf -d -L
ntop      2960     1  2989  0   10 08:47 ?        00:00:00 ntop @/etc/ntop.conf -d -L
ntop      2960     1  2990  0   10 08:47 ?        00:00:00 ntop @/etc/ntop.conf -d -L
ntop      2960     1  3002  0   10 08:47 ?        00:00:00 ntop @/etc/ntop.conf -d -L
ntop      2960     1  3027  0   10 08:47 ?        00:00:00 ntop @/etc/ntop.conf -d -L
ntop      2960     1  3028  0   10 08:47 ?        00:00:00 ntop @/etc/ntop.conf -d -L
ntop      2960     1  3104  0   10 08:48 ?        00:00:01 ntop @/etc/ntop.conf -d -L
root      2994     1  2994  0    1 08:47 ?        00:00:00 /usr/sbin/atd
avahi     3025     1  3025  0    1 08:47 ?        00:00:00 avahi-daemon: running [localhost.local]
avahi     3026  3025  3026  0    1 08:47 ?        00:00:00 avahi-daemon: chroot helper
68        3043     1  3043  0    1 08:47 ?        00:00:03 hald
root      3044  3043  3044  0    1 08:47 ?        00:00:00 hald-runner
68        3052  3044  3052  0    1 08:47 ?        00:00:00 hald-addon-acpi: listening on acpid socke
68        3057  3044  3057  0    1 08:47 ?        00:00:00 hald-addon-keyboard: listening on /dev/in
root      3066  3044  3066  0    1 08:47 ?        00:00:06 hald-addon-storage: polling /dev/hdc
root      3089     1  3089  0    1 08:48 ?        00:00:00 rrdtimer
root      3106     1  3106  0    1 08:48 ?        00:00:00 /usr/sbin/smartd -q never
root      3111     1  3111  0    1 08:48 ?        00:00:00 /usr/bin/perl /usr/libexec/webmin/miniser
root      3114     1  3114  0    1 08:48 tty1     00:00:00 /sbin/mingetty tty1
root      3115     1  3115  0    1 08:48 tty2     00:00:00 /sbin/mingetty tty2
root      3116     1  3116  0    1 08:48 tty3     00:00:00 /sbin/mingetty tty3
root      3117     1  3117  0    1 08:48 tty4     00:00:00 /sbin/mingetty tty4
root      3118     1  3118  0    1 08:48 tty5     00:00:00 /sbin/mingetty tty5
root      3137     1  3137  0    1 08:48 tty6     00:00:00 /sbin/mingetty tty6
root      3174     1  3174  0    1 08:48 ?        00:00:05 perl ./read-data.pl start apps
root      3177     1  3177  0    1 08:48 ?        00:00:02 perl ./read-data.pl start diskio
root      3179     1  3179  0    1 08:48 ?        00:00:00 /usr/bin/python -tt /usr/sbin/yum-updates
root      3182     1  3182  0    1 08:48 ?        00:00:00 /usr/libexec/gam_server
root      3183     1  3183  0    1 08:48 ?        00:00:12 perl ./read-data.pl start mysql
root      3186     1  3186  0    1 08:48 ?        00:00:05 perl ./read-data.pl start netstat
root      3190     1  3190  0    1 08:48 ?        00:00:04 perl ./read-data.pl start part
root      3194     1  3194  0    1 08:48 ?        00:00:21 perl ./read-data.pl start system
root      3198     1  3198  0    1 08:48 ?        00:00:02 perl ./read-data.pl start traffic
root      3329  2652  3329  0    1 08:52 ?        00:00:00 sshd: root@pts/0
root      3331  3329  3331  0    1 08:52 pts/0    00:00:00 -bash
root     15898  3331 15898  0    1 15:55 pts/0    00:00:00 ps -eLf
  • 所以下面这个命令我们可以获得当前系统的线程总数
# 这里解释一下tail -n +2,这表示从第二行tail到结尾,目的是过滤掉第一行的title
root@localhost[0]~15:55:14# ps -eLf|tail -n +2|wc -l
123

pstree

  • 毫无疑问这是一个非常干净的做法,切中我们的要求
# 注意中括号前面的那个数字,对应的线程数就从这里体现,注意这个数字并非只可能是线程,子进程也有可能
# 如果你加上-a参数,那么这些数字会展开成线程,也就是一个线程一行
root@localhost[0]~15:43:36# pstree
init─┬─acpid
     ├─atd
     ├─auditd─┬─audispd───{audispd}
     │        └─{auditd}
     ├─automount───4*[{automount}]
     ├─avahi-daemon───avahi-daemon
     ├─crond
     ├─cupsd
     ├─dbus-daemon───{dbus-daemon}
     ├─events/0
     ├─gam_server
     ├─gpm
     ├─hald───hald-runner─┬─hald-addon-acpi
     │                    ├─hald-addon-keyb
     │                    └─hald-addon-stor
     ├─hcid
     ├─hidd
     ├─httpd───8*[httpd]
     ├─khelper
     ├─klogd
     ├─krfcommd
     ├─ksoftirqd/0
     ├─kthread─┬─aio/0
     │         ├─ata/0
     │         ├─ata_aux
     │         ├─cqueue/0
     │         ├─kacpid
     │         ├─kauditd
     │         ├─kblockd/0
     │         ├─khubd
     │         ├─kjournald
     │         ├─kmpath_handlerd
     │         ├─kmpathd/0
     │         ├─kpsmoused
     │         ├─kseriod
     │         ├─kstriped
     │         ├─kswapd0
     │         ├─mpt_poll_0
     │         ├─2*[pdflush]
     │         ├─rpciod/0
     │         └─scsi_eh_0
     ├─mcstransd
     ├─migration/0
     ├─6*[mingetty]
     ├─miniserv.pl
     ├─mysqld_safe───mysqld───10*[{mysqld}]
     ├─ntop───9*[{ntop}]
     ├─pcscd───{pcscd}
     ├─8*[perl]
     ├─portmap
     ├─restorecond
     ├─rpc.idmapd
     ├─rpc.statd
     ├─sdpd
     ├─2*[sendmail]
     ├─smartd
     ├─sshd───sshd───bash───pstree
     ├─syslogd
     ├─udevd
     ├─watchdog/0
     ├─xfs
     ├─xinetd
     └─yum-updatesd
  • 这样我们就获得了一个读取系统当前的线程总数的方法
root@localhost[0]~15:51:42# pstree -a|wc -l
122

htop

  • 别忘了我们还有很cute的htop命令,里面也能看到线程信息,而且很容易操作
Edit | WYSIWYG | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r2 < r1 | More topic actions
 
Powered by YWiki
This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding YWiki? Send feedback