在雪豹上运行 Java 6。
您应该能够使用 jinfo 实用程序在正在运行的 Java 进程上打开 ExtendedDTraceProbes。即使在我的命令提示符下,jinfo也谈到了启用通用标志:
Usage:
jinfo [option] <pid>
(to connect to running process)
...
where <option> is one of:
-flag [+|-]<name> to enable or disable the named VM flag
据我所知,DTrace 标志没有任何特殊价值,重要的是它们的存在与否。
但是当我尝试这样做时,我会遇到两个错误之一,这取决于我是否以 sudo 开头。
假设:
jps
1234 StayRunning
...
与 StayRunning 进程相同的用户:
jinfo -flag +ExtendedDTraceProbes 1234
Exception in thread "main" java.io.IOException: Command failed in target VM
at sun.tools.attach.MacosxVirtualMachine.execute(MacosxVirtualMachine.java:200)
at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:195)
at sun.tools.attach.HotSpotVirtualMachine.setFlag(HotSpotVirtualMachine.java:172)
at sun.tools.jinfo.JInfo.flag(JInfo.java:111)
at sun.tools.jinfo.JInfo.main(JInfo.java:58)
以 root 身份尝试:
sudo jinfo -flag +ExtendedDTraceProbes 1234
Password: (which I enter)
1234: Unable to open socket file: target process not responding or HotSpot VM not loaded
错误在第二行,当然进程仍在运行。
奇怪的是,这个页面没有显示 OS X 的“+”选项,但是我自己的机器打印出使用信息。
这是我的简单代码。它与 Eclipse 类似地失败。
StayRunning.java
class StayRunning {
public static void main( String [] args ) throws Exception {
long counter = 0L;
while( true ) {
Thread.sleep( 1000 );
counter++;
System.out.println( "tick "+counter );
}
}
}