Linuxの特定のプロセスで使用されるスレッドの数を監視したいと思います。プロセスのパフォーマンスに影響を与えることなく、この情報を取得する簡単な方法はありますか?
18 に答える
特定の pid のスレッド数を取得するには:
$ ps -o nlwp <pid>
Number of Light Weight Processes (threads) の略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 }'
プロセス内の各スレッドは、 の下にディレクトリを作成します/proc/<pid>/task
。ディレクトリの数を数えると、スレッドの数がわかります。
cat /proc/<PROCESS_PID>/status | grep Threads
使用する場合:
ps uH p <PID_OF_U_PROCESS> | wc -l
「wc」が数えている行の1つは「ps」コマンドのヘッダーであるため、結果から1を引く必要があります。
JStackは非常に安価です。1つのオプションは、出力をgrepにパイプしてアクティブなスレッドを見つけてから、wc-lにパイプすることです。
よりグラフィカルなのはJConsoleで、特定のプロセスのスレッド数を表示します。
特定のプロセスのスレッド数を表示する 1 つのコマンドを次に示します。
ps -L -o pid= -p <pid> | wc -l
他のps
ベースの回答とは異なり、オプションのおかげでヘッダー行1
がないため、出力から減算する必要はありません。ps
-o pid=
私の答えはより多くのGUIですが、それでも端末内にあります。Htop は、ちょっとした設定で使用できます。
- トップを起動します。
- F2 を押して設定メニューに入ります。
- 一番左の列から「列」を選択します
- 右端の列から、メインの監視出力に追加する列を選択します。探しているのは「NLWP」です。
- F10 を押します。
新しいJDKディストリビューションには、JConsoleとVisualVMが付属しています。どちらも、実行中のJavaプロセスからダーティな詳細を取得するための素晴らしいツールです。これをプログラムで行う必要がある場合は、JMXを調べてください。
jvmtopは、他のメトリックの横に現在の jvm スレッド数を表示できます。
複数のプロセスのスレッド数を探している場合、プロセス名や 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>
特定の pid に対して cpu を使用してスレッドの数を調べようとしている場合は、次を使用します。
top -bc -H -n2 -p <pid> | awk '{if ($9 != "0.0" && $1 ~ /^[0-9]+$/) print $1 }' | sort -u | wc -l