我如何监视Linux上的进程的线程数?

我想监视Linux上特定进程使用的线程数。 有没有简单的方法来获得这些信息,而不会影响过程的性能?

尝试

ps huH p <PID_OF_U_PROCESS> | wc -l 

或htop

进程中的每个线程都会在/proc/<pid>/task下创build一个目录。 计算目录的数量,并且你有线程的数量。

在shell上的ps -eLf会给你一个当前在系统上运行的所有线程和进程的列表。 或者,您可以运行top命令,然后点击“H”切换线程列表。

 cat /proc/<PROCESS_PID>/status | grep Threads 

JStack相当便宜 – 一种select是通过greppipe道输出find活动线程,然后通过wc -lpipe道。

JConsole以graphics方式显示给定进程的线程数。

如果你使用:

 ps uH p <PID_OF_U_PROCESS> | wc -l 

您必须减去结果1,因为其中一行“wc”正在计数是“ps”命令的标题。

为了得到给定PID的线程数量:

 $ ps -o nlwp <pid> 

其中nlwp代表轻量级进程(线程)的数量 。 因此, ps别名,这意味着

 $ ps -o thcount <pid> 

也有效。

如果要监视线程数,只需使用watch

$ watch ps -o thcount

为了得到系统中运行的所有线程的总和:

 $ ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }' 

这是一个显示给定进程的线程数的命令:

 ps -L -o pid= -p <pid> | wc -l 

与其他基于ps的答案不同,这里没有必要减去1的输出,因为没有ps标题行感谢-o pid=选项。

较新的JDK发行版附带JConsole和VisualVM。 这两个都是从运行的Java过程中获取脏东西的绝佳工具。 如果您必须以编程方式执行此操作,请调查JMX。

jvmtop可以显示当前的jvm线程数量旁边的其他指标。

$ 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 

如果你试图找出一个给定的PID使用CPU的线程数,我会使用:

 top -bc -H -n2 -p <pid> | awk '{if ($9 != "0.0" && $1 ~ /^[0-9]+$/) print $1 }' | sort -u | wc -l 

如果你对那些真正活跃的线程感兴趣,比如做一些事情(不是阻塞的,没有timed_waiting,不是报告“线程正在运行”,而是真的在等待数据stream) – 那么你可能会对jstack-active感兴趣。

这个简单的bash脚本运行jstack然后过滤出启发式似乎是空闲的所有线程,显示那些实际上消耗CPU周期的线程的堆栈跟踪。

VisualVM可以显示给定JVM进程的线程的明确状态

在这里输入图像说明

最简单的方法是使用“htop”。 你可以安装“htop”(顶级版本),它会显示你所有的内核,进程和内存使用情况。

按“Shift + H”显示所有进程或再次按下将其隐藏。 按“F4”键search您的进程名称。

在Ubuntu或Debian上安装:

 sudo apt-get install htop 

在Redhat或CentOS上安装:

 yum install htop dnf install htop [On Fedora 22+ releases] 

如果你想从源代码编译“htop”,你会在这里find它。