【问题标题】:How to see call tree profiling in JMH?如何查看 JMH 中的调用树分析?
【发布时间】:2017-06-02 16:42:21
【问题描述】:

我想分析 JMH 测试并查看 VisualVM 中的调用树。但是当我使用 StackProfiler 时,它会为我提供类似的本地方法,这在我的情况下完全没用。

....[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

【问题讨论】:

    标签: java profiling profiler microbenchmark jmh


    【解决方案1】:

    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])
    

    【讨论】:

    • 看来你是对的。在我的情况下,创建类似“new OptionsBuilder().addProfiler("stack", "lines=5;top=3;detailLine=true;excludePackages=true;period=1")...”的选项,但对于复杂的长时间运行的方法更容易编写一个小类并使用 VisualVM。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    相关资源
    最近更新 更多