Java 如何确定JVM GC吞吐量?

Java 如何确定JVM GC吞吐量?,java,garbage-collection,jvm,Java,Garbage Collection,Jvm,确定Oracle Java 8 JVM垃圾收集器吞吐量的最简单方法是什么,最好使用JDK命令行工具 使用jstat命令,我可以获得总垃圾收集时间(GCT列)。通过将该值的变化与GC日志进行比较,jstat输出的GCT值似乎是以秒为单位的累计GC运行时间(自JVM启动以来)。 这是正确的吗 那么,我可以这样计算GC吞吐量吗 1 - GCT / time_since_jvm_start jstat可用于获取GC和时间,因为JVM开始使用以下命令: jstat -gcutil -t <jvm-

确定Oracle Java 8 JVM垃圾收集器吞吐量的最简单方法是什么,最好使用JDK命令行工具

使用jstat命令,我可以获得总垃圾收集时间(GCT列)。通过将该值的变化与GC日志进行比较,jstat输出的GCT值似乎是以秒为单位的累计GC运行时间(自JVM启动以来)。 这是正确的吗

那么,我可以这样计算GC吞吐量吗

1 - GCT / time_since_jvm_start
jstat可用于获取GC和时间,因为JVM开始使用以下命令:

jstat -gcutil -t <jvm-pid> 1000 1
jstat-gcutil-t 1000 1

你的问题是正确的。
GCT
列包含JVM在年轻GC和完整GC中停止执行垃圾收集的总时间

您可以在编写时使用jstat(
jstat-gcutil-t1000 1
),并查看第一列以查看JVM运行的总时间。我们称之为正常运行时间。此时间戳和GC时间均以秒为单位。如果您想计算未在GC中花费的时间百分比,您可以这样做,正如您所写:

1 - GCT / uptime

我认为称之为吞吐量有点误导。例如,如果您使用CMS收集器,GC与应用程序并行进行,降低了应用程序吞吐量,但实际上并未停止应用程序。

GC吞吐量是什么意思?在我看来,在阅读您的问题时,您试图计算花费在GC中的时间百分比?以下是“热点虚拟机垃圾收集优化指南”中的定义:“吞吐量是长时间内未花费在垃圾收集上的总时间的百分比。吞吐量包括分配所花费的时间(但通常不需要调整分配速度)。“吞吐量的另一个概念是每个核心时间或墙时间收集的兆字节。无论如何,您也可以启用gc日志记录并使用@marko,而不是使用jstat。吞吐量是对每时间单位的速率的度量。e、 g.MB/秒或每分钟车数。您似乎在寻找暂停时间的百分比。这不是吞吐量。来自维基百科;一般来说,吞吐量是指生产速率或处理某事物的速率。当用于通信网络(如以太网或分组无线电)时,吞吐量或网络吞吐量是指通过通信信道成功传递消息的速率@marko我不同意它在声明中所说的一切。调整代码以进行分配通常是我做的第一件事,而且做得不够频繁。依我拙见