我想让一些长时间运行的服务器应用程序定期输出 Java 中的一般 GC 性能数据,例如 Runtime.freeMemory() 的 GC 等价物,例如完成的周期数、平均时间等。
我们的系统在客户机器上运行,怀疑配置错误的内存池导致了过多的 GC 频率和长度 - 我认为定期报告基本 GC 活动通常会很好。
有没有独立于平台的方法来做到这一点?
编辑:我特别想在运行时将此数据输出到系统日志(控制台);我不想像使用 JConsole 或 JVisualVM 那样连接到 JVM。
Edit2:MX bean 看起来像我想要的 - 有人有一个可以获取其中之一的工作代码示例吗?
这是一个使用的示例GarbageCollectorMXBean http://java.sun.com/javase/6/docs/api/java/lang/management/GarbageCollectorMXBean.html
打印出 GC 统计信息。想必您会定期调用此方法,例如调度使用ScheduledExecutorService http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html
.
public void printGCStats() {
long totalGarbageCollections = 0;
long garbageCollectionTime = 0;
for(GarbageCollectorMXBean gc :
ManagementFactory.getGarbageCollectorMXBeans()) {
long count = gc.getCollectionCount();
if(count >= 0) {
totalGarbageCollections += count;
}
long time = gc.getCollectionTime();
if(time >= 0) {
garbageCollectionTime += time;
}
}
System.out.println("Total Garbage Collections: "
+ totalGarbageCollections);
System.out.println("Total Garbage Collection Time (ms): "
+ garbageCollectionTime);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)