如何使用Jconsole计算吞吐量

时间:2017-09-19 13:26:55

标签: java garbage-collection jconsole throughput

有没有办法使用JConsole接口计算Java程序的给定时隙的垃圾收集吞吐量?例如,我想比较一个程序中的不同功能以及GC吞吐量如何在这些功能之间变化。

我已经阅读了Oracle JConsole文档,我能找到的最接近的指标是GC Time,它是:

“GC时间:在垃圾收集上花费的累计时间和调用总数。它可能有多行,每行代表Java VM中使用的一个垃圾收集器算法。”

来源:https://docs.oracle.com/javase/8/docs/technotes/guides/management/jconsole.html

但是这并没有指定开始累积的开始时间。如果我能确定何时开始,我可以自己计算吞吐量。

或者是否还有其他方法来计算JConsole的吞吐量?

1 个答案:

答案 0 :(得分:0)

我通常使用两个:

  1. GCViewer
  2. gceasy
  3. 同时,因为不同的工具可能会显示不同的结果。

    对于您的问题答案 - 从应用程序开始启用GC日志。因此,当您看到GC时间时,您可以获得吞吐量=总和(GC时间)/总时间。

      

    启用GC日志,您的意思是使用-verbose:gc或-Xloggc:?

    不,我的意思是内部counters。澄清是很好的。

      

    另外:你知道GC时间代表什么:从申请开始的时间,或每个给定时间段的时间?

    从申请开始。使用jstat查看GC时间的另一种方法。我们将拥有这个计划:

    public class JStatTest {
    
        public static void main(String[] args) throws Exception {
            for (int i = 0; i < 10; ++i) {
                System.gc();
                System.out.println("Wait...");
                Thread.sleep(1000);
            }
            Thread.sleep(100_000);
        }
    
    }
    

    我们可以连接jstat(从开始)和jconsole(接近结束,循环后),看看:

    enter image description here

    未启用GC详细日志记录。

    查看总时间:

    enter image description here