我如何监视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它。