web-dev-qa-db-ja.com

Linuxでプロセスのスレッド数を監視するにはどうすればよいですか?

Linux上の特定のプロセスで使用されるスレッドの数を監視したいと思います。プロセスのパフォーマンスに影響を与えずにこの情報を取得する簡単な方法はありますか?

110
zorro_velcro

試してみる

ps huH p <PID_OF_U_PROCESS> | wc -l

または htop

136
slav0nic

特定のpidのスレッド数を取得するには:

$ ps -o nlwp <pid>

nlwpは、軽量プロセス(スレッド)の数を表します。したがって、psnlwpthcountにエイリアスします。つまり、

$ ps -o thcount <pid>

動作します。

スレッドカウントを監視する場合は、watchを使用します。

$ watch ps -o thcount <pid>

システムで実行中のすべてのスレッドの合計を取得するには:

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

プロセス内の各スレッドは、/proc/<pid>/taskの下にディレクトリを作成します。ディレクトリの数を数えると、スレッドの数がわかります。

45
bdonlan
cat /proc/<PROCESS_PID>/status | grep Threads
29
PbxMan

シェルのps -eLfは、システムで現在実行されているすべてのスレッドとプロセスのリストを提供します。または、topコマンドを実行し、「H」を押してスレッドリストを切り替えることができます。

20
user2045557

使用する場合:

ps uH p <PID_OF_U_PROCESS> | wc -l

「wc」がカウントしている行の1つが「ps」コマンドのヘッダーであるため、結果から1を減算する必要があります。

6
flexo

JStackは非常に安価です。1つのオプションは、出力をgrepにパイプしてアクティブなスレッドを見つけ、wc -lにパイプすることです。

よりグラフィカルなJConsoleは、特定のプロセスのスレッド数を表示します。

6
rhys keepence

特定のプロセスのスレッド数を表示する1つのコマンドを次に示します。

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

他のpsベースの回答とは異なり、1オプションのおかげでpsヘッダー行がないので、出力から-o pid=を減算する必要はありません。

5
jlliagre

$ 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
5
Avinash Reddy

新しいJDKディストリビューションには、JConsoleおよびVisualVMが付属しています。どちらも、実行中のJavaプロセスから汚れた詳細を取得するための素晴らしいツールです。プログラムでこれを行う必要がある場合は、JMXを調べてください。

4
basszero

jvmtop は、他のメトリックの横に現在のjvmスレッド数を表示できます。

3
MRalwasser

最も簡単な方法は、「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」をコンパイルする場合は、 here にあります。

特定のpidに対してcpuを使用しているスレッドの数を調べようとしている場合は、次を使用します。

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

本当にactiveであるスレッドに興味がある場合-何かをするときのように(ブロックされず、timed_waitingではなく、「スレッド実行中」を報告しないが、ストリームがデータを提供するのを実際に待っています)アイドル状態ではあるがライブに座っているのではなく、 jstack-active に興味があるかもしれません。

この単純なbashスクリプトはjstackを実行し、その後、ヒューリスティックによりアイドル状態になっていると思われるすべてのスレッドを除外し、実際にCPUサイクルを消費しているスレッドのスタックトレースを表示します。

0
Partly Cloudy

VisualVMは、特定のJVMプロセスのスレッドの明確な状態を表示できます。

enter image description here

0
DiveInto