Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
[Linux]straceでjavaプロセスの挙動を監視した

straceでjavaプロセスの挙動を確認した

strace コマンドとは

この辺が参考になる。

strace コマンドの使い方をまとめてみた - sonots:blog

straceを利用して、プロセスが呼び出すシステムコールをトレースすることが出来る。

コマンドからトレース

実行コマンドが分かっている場合は、strace の後にトレースしたいコマンドを記述する感じ。

$ strace [command]

という感じで実行すれば良い。

プロセスを指定

実行中プロセスをトレースしたい場合がある。pid 指定でトレースする。

strace -p [pid]

具体例

例が渋すぎるが、最近実行した例を1つ。 JBossのtwiddleがある環境でロングランする事象があったので調査した。 切り分けし易いように、twiddle.shではなく、内部で実行しているjavaコマンドを直接実行してトレースした。

strace -tt -f -s 1024 -o strace.log java -classpath /<任意のpath>/twiddle.jar:/<任意のpath>/jbossall-client.jar:/<任意のpath>/jboss-common.jar:/<任意のpath>/getopt.jar:/<任意のpath>/log4j.jar:/<任意のpath>/jboss-jmx.jar:/<任意のpath>/dom4j-1.5.jar org.jboss.console.twiddle.Twiddle -s <任意のurlやip>:<任意のport> <command> [ command_arguments

オプションが幾つかついているが補足しておくと、

-tt: マイクロ秒単位で表示
-f: 内部でスレッドが切れている場合、スレッドまでトレースする場合
-s: 1行あたり表示される文字数を変更する。(デフォルトは32文字)
-o: ファイルに出力するオプション

といった感じ。

-f オプションの場合、別プロセスのトレース結果が同一ファイルに出力される。別ファイルにしたい場合は、-ff オプションにすれば良い。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment