この辺が参考になる。
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 オプションにすれば良い。