Answers:
1
从中减去,因为它会打印一行USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
表格标题。
要获取给定pid的线程数:
$ ps -o nlwp <pid>
其中nlwp
代表轻量进程数(线程)。因此ps
别名nlwp
到thcount
,这意味着
$ ps -o thcount <pid>
确实也可以。
如果要监视线程数,只需使用watch
:
$ watch ps -o thcount <pid>
要获取系统中运行的所有线程的总和:
$ ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'
watch
命令。但是,请注意thcount
,尽管nlwp
对我有用,但使用某些功能(Red Hat ...)可能会失败。
进程中的每个线程都会在下创建一个目录/proc/<pid>/task
。计算目录数,然后得到线程数。
find /proc/<PID>/task -maxdepth 1 -type d -print | wc -l
。只需将<PID>替换为您可以从中获得top
或使用的过程IDps
ps -eLf
外壳程序上的“线程”将为您提供系统上当前正在运行的所有线程和进程的列表。或者,您可以运行top
命令,然后单击“ H”以切换线程列表。
-p
如有必要,可以很容易地添加一个或其他任何东西。这是您需要查看线程列表的最低要求。
$ 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
jvmtop可以在其他指标旁边显示当前的jvm线程数。
最简单的方法是使用“ htop”。您可以安装“ htop”(top的高级版本),它将显示所有内核,进程和内存使用情况。
按“ Shift + H”显示所有过程,或再次按将其隐藏。按“ F4”键搜索您的进程名称。
在Ubuntu或Debian上安装:
sudo apt-get install htop
在Redhat或CentOS上安装:
yum install htop
dnf install htop [On Fedora 22+ releases]
如果要从源代码编译“ htop”,请在此处找到它。
如果您尝试使用给定pid的cpu找出线程数,我将使用:
top -bc -H -n2 -p <pid> | awk '{if ($9 != "0.0" && $1 ~ /^[0-9]+$/) print $1 }' | sort -u | wc -l
如果您对真正活动的那些线程感兴趣-就像在做某事(未阻塞,未timed_waiting,未报告“线程正在运行”,而是真正在等待流提供数据)而不是闲置但处于活动状态- -那么您可能对jstack-active感兴趣。
这个简单的bash脚本运行,jstack
然后过滤掉所有启发式的似乎空闲的线程,向您显示实际上消耗CPU周期的那些线程的堆栈跟踪。
如果要在Linux系统中每个用户的线程数,则应使用:
ps -eLf | grep <USER> | awk '{ num += $6 } END { print num }'
使用所需的用户名。