11

如何查看我的 Java 程序正在进行哪些系统调用?是否有可以在 Linux 上执行此操作的工具?

4

3 回答 3

15

使用 strace。但我的情况有一个窍门。选项-f是必需的,与 相同--follow-forks。例如,下面的代码:

public class Foo {
    public static void main (String [] args) {
        System.out.println("XXX");    
    }
}

运行javac Foo.java编译后,strace java Foo 2>&1 | grep write什么也不打印。但是strace -f java Foo 2>&1 | grep write打印:

[pid 11655] write(3, "0x63", 4)         = 4
[pid 11655] write(3, "\0", 1)           = 1
[pid 11655] write(3, "\0", 1)           = 1
[pid 11655] write(3, "\0", 1)           = 1
[pid 11655] write(3, "\0", 1)           = 1
[pid 11655] write(3, "\0", 1)           = 1
[pid 11655] write(3, "\0", 1)           = 1
[pid 11655] write(3, "\0", 1)           = 1
[pid 11655] write(3, "\0", 1)           = 1
[pid 11655] write(1, "XXX", 3XXX)          = 3
[pid 11655] write(1, "\n", 1

[pid 11655] write(1, "XXX", 3XXX) = 3显示为 进行的系统调用System.out.println("XXX")

于 2013-03-04T05:27:34.680 回答
12

使用strace

strace -f java your_program

或者

strace -f -p <pid of your java program>
于 2012-04-30T15:58:30.323 回答
1

见 ltrace http://linux.die.net/man/1/ltrace

于 2012-04-30T13:56:15.883 回答