我想监视Linux上特定进程使用的线程数.有没有一种简单的方法来获取这些信息而不影响流程的性能?
尝试
ps huH p| wc -l
或者htop
要获取给定pid的线程数:
$ ps -o nlwp
其中nlwp
代表轻量级进程数(线程).因此ps
别名nlwp
到thcount
,这意味着
$ ps -o thcount
也有效.
如果要监视线程数,只需使用watch
:
$ watch ps -o thcount
要获取系统中运行的所有线程的总和:
$ ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'
进程中的每个线程都在其下创建一个目录/proc/
.计算目录数,并获得线程数.
cat /proc//status | grep Threads
ps -eLf
在shell上应该给出一个当前在系统上运行的所有线程和进程的列表.或者,您可以运行top
命令然后点击"H"切换线程列表.
JStack相当便宜 - 一种选择是通过grep管道输出来查找活动线程然后通过wc -l管道.
更图形化的是JConsole,它显示给定进程的线程数.
如果您使用:
ps uH p| wc -l
您必须将1减去结果,因为"wc"计算的行之一是"ps"命令的标题.
这是一个显示给定进程的线程数的命令:
ps -L -o pid= -p| wc -l
与其他ps
基于答案不同,由于该选项,因此没有必要1
从其输出中减去因为没有ps
标题行-o pid=
.
$ ps H p pid-id
H-列出进程中的所有单个线程
要么
$cat /proc/pid-id/status
pid-id是进程ID
例如..(截断了以下输出)
root@abc:~# cat /proc/8443/status
Name: abcdd
State: S (sleeping)
Tgid: 8443
VmSwap: 0 kB
Threads: 4
SigQ: 0/256556
SigPnd: 0000000000000000