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


135

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


アプリケーションのプロセスが短時間だけ実行される場合はどうでしょうか?(2秒と言います)
user2023370

回答:


152

試す

ps huH p <PID_OF_U_PROCESS> | wc -l

またはhtop


3
テーブルヘッダーの1ような行を出力するので、それから差し引く必要があると思いますUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
AhmetB-Google、2012年

2
「h」はヘッダーを非表示にします。
thinkmassive 2015

11
-1なぜwcあなたができるときに出力をパイプするのps -o thcount <pid>ですか?この回答を参照してください。
2017年

73

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

$ ps -o nlwp <pid>

どこnlwpの略番号軽量のプロセス(スレッド)。したがって、ps別名nlwpthcountどの手段もの、

$ ps -o thcount <pid>

も機能します。

スレッド数を監視する場合は、次のように使用しますwatch

$ watch ps -o thcount <pid>

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

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

2
ここで最も役立つ答え。特にwatchコマンド。ただし、thcount一部の(Red Hat ...)で使用すると失敗する可能性があることに注意してnlwpください。
Joshua Detwiler

50

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


1
上記のコメントに追加します。このコマンドを使用して、スレッドの数を確認できますfind /proc/<PID>/task -maxdepth 1 -type d -print | wc -l<PID>を、取得topまたは使用できるプロセスIDに置き換えますps
Navigatron


21

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


これが私のソースです。1つのプロセスだけに制限したくありません。-p必要に応じてこれに何かを追加するのは簡単です。これは、スレッドリストを表示するために最低限必要なものです。
エリックロバートソン

6

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

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


6

使用する場合:

ps uH p <PID_OF_U_PROCESS> | wc -l

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


StackOverflowへようこそ。おそらく、これはslav0nicによる回答へのコメントであるべきです。ただし、私が理解しているように、最初にSOに参加したときは、ある程度の評判が得られるまで回答にコメントすることはできません。あなたは正しいです; ヘッダー行をpsスレッドの1つとして数えないでください。
ジョナサンレフラー、2011

6

以下は、特定のプロセスのスレッド数を表示する1つのコマンドです。

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

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


5

$ 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

4

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



2

最も簡単な方法は、「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」をコンパイルしたい場合は、ここで見つけることができます


1

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

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

0

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

この単純なbashスクリプトが実行jstackされてから、ヒューリスティックスによってアイドリングしているように見えるすべてのスレッドが除外され、実際にCPUサイクルを消費しているスレッドのスタックトレースが表示されます。



0

Linuxシステムでユーザーあたりのスレッド数が必要な場合は、以下を使用する必要があります。

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

ここで、目的のユーザー名を使用します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.