2017-06-02 11 views
1

私はJMHテストをプロファイルし、VisualVMのような呼び出しツリーを見たいと思っています。しかし、私がStackProfilerを使うと、それは私のようなネイティブメソッドを私に与えてくれて、私の場合は全く役に立たない。JMHでコール・ツリー・プロファイリングを見るには?

....[Thread state distributions].................................................................... 
59,9%   TIMED_WAITING 
23,0%   WAITING 
17,0%   RUNNABLE 

....[Thread state: TIMED_WAITING]................................................................... 
47,3% 78,9% sun.misc.Unsafe.park 
    8,3% 13,8% java.lang.Thread.sleep 
    4,4% 7,3% java.lang.Object.wait 

....[Thread state: WAITING]......................................................................... 
21,9% 95,1% sun.misc.Unsafe.park 
    1,1% 4,9% java.lang.Object.wait 

....[Thread state: RUNNABLE]........................................................................ 
13,5% 79,0% sun.nio.ch.EPollArrayWrapper.epollWait 
    2,0% 11,5% java.net.SocketInputStream.socketRead0 
    1,0% 5,7% java.net.PlainSocketImpl.socketAccept 

答えて

3

JMHのスタックプロファイラは、やや単純な実装です。本格的なプロファイラを使用しないでください。あなたが言及したVisualVM - もっと必要なものがあれば?代わりに、-prof stack:help

$ java -jar jmh-samples/target/benchmarks.jar -prof stack:help 
Usage: -prof <profiler-name>:opt1=value1,value2;opt2=value3 

Options accepted by org.openjdk.jmh.profile.StackProfiler: 

    lines=<int>  Number of stack lines to save in each stack trace. 
        Larger values provide more insight into who is calling 
        the top stack method, as the expense of more stack 
        trace shapes to collect. (default: [1]) 
+0

あなたが正しいように見えます。私のケースでは、 "OptionsBuilder()"のようにaddProfiler( "stack"、 "lines = 5; top = 3; detailLine = true; excludePackages = true; period = 1")... "長い実行方法は、小さなクラスを作成し、VisualVMを使用する方が簡単です。 –

関連する問題