Java 如何使用Jconsole计算吞吐量
有没有一种方法可以使用JConsole接口计算Java程序给定时间段的垃圾收集吞吐量?例如,我想比较一个程序中的不同功能,以及GC吞吐量在这些功能之间的变化 我已经阅读了Oracle JConsole文档,我能找到的最接近的度量是GC时间,即: GC时间:垃圾收集所花费的累计时间和调用总数。它可能有多行,每行代表Java VM中使用的一个垃圾收集器算法 资料来源: 但这并没有指定开始累积的开始时间。如果我能确定何时开始,我可以自己计算吞吐量 或者,是否有其他方法来计算JConsole上的吞吐量 我通常使用两种: 同时,因为不同的工具可以显示不同的结果 对于您的问题,从应用程序开始就启用了答案-GC日志。因此,当您看到GC时间时,您可以得到吞吐量=总和(GC时间)/总时间Java 如何使用Jconsole计算吞吐量,java,garbage-collection,jconsole,throughput,Java,Garbage Collection,Jconsole,Throughput,有没有一种方法可以使用JConsole接口计算Java程序给定时间段的垃圾收集吞吐量?例如,我想比较一个程序中的不同功能,以及GC吞吐量在这些功能之间的变化 我已经阅读了Oracle JConsole文档,我能找到的最接近的度量是GC时间,即: GC时间:垃圾收集所花费的累计时间和调用总数。它可能有多行,每行代表Java VM中使用的一个垃圾收集器算法 资料来源: 但这并没有指定开始累积的开始时间。如果我能确定何时开始,我可以自己计算吞吐量 或者,是否有其他方法来计算JConsole上的吞吐量
启用GC日志是指使用-verbose:GC还是-Xloggc: 不,我是说内部的。澄清是好的 另外:您知道GC时间代表什么吗:从应用程序启动开始的时间,或者每个给定时间段的时间 从申请开始。另一种查看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);
}
}
公共类JStatTest{
公共静态void main(字符串[]args)引发异常{
对于(int i=0;i<10;++i){
gc();
System.out.println(“等待…”);
睡眠(1000);
}
线程。睡眠(100_000);
}
}
我们可以连接jstat(从开始)和jconsole(从接近结束,在循环之后),并看到以下内容:
这没有启用GC详细日志记录
要查看总时间,请执行以下操作:
gcviewer可以根据GC日志为您计算吞吐量。或者,您可以通过从MXBean获取原始数据来自己计算。很好,谢谢,我不知道这个工具!看起来正是我需要的@8472通过启用GC日志,您的意思是使用-verbose:GC还是-Xloggc:?如果是这样的话,那么您是否必须聚合打印到命令行或文件中的结果日志?另外:你知道GC时间代表什么吗:从应用程序启动开始的时间,或者每个给定时间段的时间?谢谢@egorlitvineko这真的很有帮助!遗憾的是,JConsole没有记录应用程序的总运行时间,但我可以从命令行输出中获得它。哦,太棒了!再次感谢,这非常有用!