如何在linux上监控进程的线程数?

时间:2008-11-06 13:29:30

标签: linux multithreading monitor

我想监视Linux上特定进程使用的线程数。 是否有一种简单的方法可以在不影响流程性能的情况下获取此信息?

18 个答案:

答案 0 :(得分:134)

ps huH p <PID_OF_U_PROCESS> | wc -l

htop

答案 1 :(得分:42)

进程中的每个线程都在/proc/<pid>/task下创建一个目录。计算目录数,并获得线程数。

答案 2 :(得分:40)

获取给定pid的线程数:

$ ps -o nlwp <pid>

nlwp代表轻量级进程数(线程)。因此psnlwp别名变为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 }'

答案 3 :(得分:28)

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

答案 4 :(得分:20)

shell上的

ps -eLf将为您提供当前在系统上运行的所有线程和进程的列表。 或者,您可以运行top命令然后点击&#39; H&#39;切换线程列表。

答案 5 :(得分:6)

如果您使用:

ps uH p <PID_OF_U_PROCESS> | wc -l

你必须在结果中减去1,因为“wc”计算的行之一是“ps”命令的标题。

答案 6 :(得分:6)

JStack非常便宜 - 一种选择是通过grep管道输出来查找活动线程然后通过wc -l管道。

更多图形化的是JConsole,它显示给定进程的线程数。

答案 7 :(得分:5)

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

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

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

答案 8 :(得分:5)

curl -XPUT localhost:9200/**myindex**/person/_meta -d '{ "type": "mongodb", "mongodb": { "servers": [ { "host": "localhost", "port": 27017 } ], "db": "newPerson", "collection": "Person", "options": { "secondary_read_preference": true }, "gridfs": false }, "index": { "name": "mongoindex", "type": "person" }

H - 列出流程中的所有单个线程

$ ps H p pid-id

pid-id是进程ID

例如......(截断以下输出)

$cat /proc/pid-id/status

答案 9 :(得分:4)

较新的JDK发行版附带JConsole和VisualVM。两者都是从正在运行的Java进程中获取脏信息的绝佳工具。如果必须以编程方式执行此操作,请调查JMX。

答案 10 :(得分:3)

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

答案 11 :(得分:1)

我的答案是更多gui,但仍在终端机内。 Htop可能需要进行一些设置。

  1. 启动htop。
  2. 按F2进入设置菜单。
  3. 从最左侧的列中选择“列”
  4. 从最右边的列中选择要添加到主监视输出的列,“ NLWP”就是您要寻找的。
  5. 按F10键。

答案 12 :(得分:1)

如果您尝试使用cpu查找给定pid的线程数,我会使用:

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

答案 13 :(得分:1)

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

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

在Ubuntu或Debian上安装:

sudo apt-get install htop

在Redhat或CentOS上安装:

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

如果你想从源代码编译“htop”,你会发现它here

答案 14 :(得分:0)

如果您正在寻找多个进程的线程数,其他答案对您不起作用,因为您看不到进程名称或 PID,这使它们变得毫无用处。改用这个:

ps -o pid,nlwp,args -p <pid_1> <pid_2> ... <pid_N>

要实时观看更改,只需添加 watch

watch ps -o pid,nlwp,args -p <pid_1> <pid_2> ... <pid_N>

答案 15 :(得分:0)

如果要在Linux系统中每个用户的线程数,则应使用:

ps -eLf | grep <USER> | awk '{ num += $6 } END { print num }'

其中<USER>使用所需的用户名。

答案 16 :(得分:0)

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

enter image description here

答案 17 :(得分:0)

如果您对那些真正活跃的线程感兴趣 - 就像做某事一样(没有阻止,没有timed_waiting,没有报告&#34;线程运行&#34;但是真的等待流提供数据)而不是闲着但活着 - 那么你可能对jstack-active感兴趣。

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