2016-11-21 22 views
0

jstackでは、実行中のJavaプロセスのスレッドダンプを取ることができます。 topps -aef | grep javaコマンドでは、ほとんどのシステムリソースを使用して不正なプロセスを特定できます。javaプロセスのスレッドダンプを取るシェルスクリプト

jstack <rogue pid> >> threaddump.logを使用すると、指定されたjavaプロセスのスレッドダンプを実行できます。

今、私の質問は、トップJavaプロセスを識別し、プロセスid(pid)を取得し、jstackユーティリティに入力してスレッドダンプを取ることができるシェルスクリプトですか?

私はオンラインで検索しており、ほとんどのリンクではプロセスIDを入力する手作業が必要です。ですから、私は手作業による入力を避けることができる既存のシェルスクリプトがあるかどうかを知りたいだけです。

ありがとうございます。私にとって

答えて

1

この配管工事:

ps -eo pid,%cpu,comm | grep java |sort -nr -k2 | head -n1 | awk '{print $1}' | xargs jstack 

説明:

のPS -eoのPID、%のCPU、COMM:

をPIDのCPU使用率ですべてのプロセスを出力し、コマンド名はgrep javaの: greps all java processes

sort -nr -k2:2番目の列で結果の逆数値をソートします。

ヘッド-n1は:印刷し、最初の列

xargsのjstack:

AWK '{$ 1印刷}' 最初の行を印刷する入力を受け取り、jstackコマンドエラー以下

+0

の引数として使用し私は上記のコマンドを実行した後に見ていますか? ps:不正なオプション - - 使用法:ps [-AaCcEefhjlMmrSTvwXx] [-O fmt | [-g fmt] [-G gid [、gid ...]] [-g grp [、grp ...]] [-u [uid、uid ...]] [-p pid [、pid。 [] [] tty [、tty ...]] [-U user [、user ...]] ps [-L] – harshavmb

+0

どのLinuxディストリビューションを使用していますか? –

+0

ご返信ありがとうございます。私はMacを使用しています...他のLinuxディストリビューションで試していませんでした。 – harshavmb

関連する問題