我想跟踪java进程的执行情况。 为此,我使用 strace 来分析它。
我已经编写了两个基本程序。
Prog1:简单的 Hello World
Prog2:使用大量 Sysout 进行素数计算。我所说的很多真的是很多!!
我正在使用 strace:strace java classfile
两个程序都工作正常。但是,当我比较它们的 strace 时,它们的输出是相同的,即系统调用及其顺序。
我的疑问是:
- 这背后的原因是什么?
- strace java 程序的正确方法是什么?
- 正在打印的语句不是 strace 的一部分...实际上 strace 输出中没有 write 系统调用?
最佳答案
默认情况下,程序strace不跟踪子进程。然而,Java VM 在进程的早期创建了一个用于实际工作的子进程。这就是为什么两个不同的程序在使用 strace 调用时生成相同结果的原因。
要同时跟踪子进程,请使用选项 -f
来strace,即:
strace -f java Hello
关于java - 对两个 java 实例进行 strace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22131044/