Mark Sweep 和 Scavenge 计数如何工作?
How do Mark Sweep and Scavenge counts work?
我有 groovy 每分钟挖掘 tomcat 并将结果转储到数据库中的代码,如下所示:
while(true){
def values = []
// some code omitted
//java.lang:type=GarbageCollector PS Scavenge, PS MarkSweep
def markSweep = new GroovyMBean(server, 'java.lang:type=GarbageCollector,name=PS MarkSweep')
values.push(markSweep.CollectionCount)
values.push(markSweep.CollectionTime) //in ms
def scavenge = new GroovyMBean(server, 'java.lang:type=GarbageCollector,name=PS Scavenge')
values.push(scavenge.CollectionCount)
values.push(scavenge.CollectionTime) //in ms
}
然后我今天随时间监控了输出,这就是我所看到的:
可以看到计数和次数单调递增。我期望计数会根据内存中的对象数量上下波动。这些 MBean 的时间和计数是否累积?
是的,它们是单调的计数器。如果您想跟踪速率,请存储读数的增量和先验值。
我有 groovy 每分钟挖掘 tomcat 并将结果转储到数据库中的代码,如下所示:
while(true){
def values = []
// some code omitted
//java.lang:type=GarbageCollector PS Scavenge, PS MarkSweep
def markSweep = new GroovyMBean(server, 'java.lang:type=GarbageCollector,name=PS MarkSweep')
values.push(markSweep.CollectionCount)
values.push(markSweep.CollectionTime) //in ms
def scavenge = new GroovyMBean(server, 'java.lang:type=GarbageCollector,name=PS Scavenge')
values.push(scavenge.CollectionCount)
values.push(scavenge.CollectionTime) //in ms
}
然后我今天随时间监控了输出,这就是我所看到的:
可以看到计数和次数单调递增。我期望计数会根据内存中的对象数量上下波动。这些 MBean 的时间和计数是否累积?
是的,它们是单调的计数器。如果您想跟踪速率,请存储读数的增量和先验值。