4

Snow Leopard で 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 で始まるかどうかに応じて、2 つのエラーのいずれかが発生します。

想定:
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

エラーは2 行目にあり、もちろんプロセスはまだ実行中です。

奇妙なことに、このページには 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 );
        }
    }
}
4

1 に答える 1

3

このプローブが「設定」または「設定解除」のいずれかである (つまり、特定の「値」が関連付けられていない) ことは間違いありません。

これはほぼ確実に Hotspot JVM の (長期にわたる) バグであり、OSX に固有のものではありません。これは、Windows で jinfo を介して VM フラグを設定できない人からのレポートです。

http://www.herongyang.com/Java-Tools/jstack-jinfo-Change-HotSpot-VM-Option.html

Linux で jinfo を介して ExtendedDTraceProbes および (科学的に!) 他のいくつかのフラグを動的に設定できないという直接的な経験を提供できます。実際、何度か試行した後、動的に設定できるフラグを見つけることができませんでした。

Sun/Oracle で関連するバグに遭遇しました。

http://bugs.sun.com/view_bug.do;jsessionid=24c1d7e1b0cda2ffffffff97aef6bbd818cf2?bug_id=6445836

最も興味深いのは、評価セクションで次のとおりです。

これと、Hotspot のドキュメントが大幅に古くなっている、または不正確であるという私自身の過去の経験に基づいて、jinfo のドキュメント/マンページ、およびプローブ自体のドキュメント (http: //download.oracle.com/javase/6/docs/technotes/guides/vm/dtrace.html) 別の方法として、Hotspot の一部の実装の詳細が変更され、このフラグの動的設定が不可能になるか、非現実的になったことを示しています。無効にされました。つまり、これは修正されないバグです。

于 2011-09-07T21:25:11.247 に答える