如何监控垃圾收集以查看GC'd是什么?

我有一个巨大的Java应用程序(运行Jdk7 64位,Weblogic 12)。 运行应用程序时不需要任何人的称呼 - 也就是空转。 我每3-4分钟就能看到一个300Mb的秒杀,然后用visual vm收集垃圾。

在这里输入图像描述

我拿走了几堆堆的痕迹,当时没有任何事情在忙。 我们也使用EHCache并添加日志记录来记录结果。 一旦应用程序启动并运行,我无法看到日志中的任何内容(闲置时),但仍然有300mb的垃圾回收发生。

使用空间低时使用堆转储,之后使用300mb时,使用eclipse内存分析器的内存分配看起来没有什么区别:

在这里输入图像描述

有没有办法看到什么是垃圾收集? 我明白,会有不断收集,但300MB好吗?


你所看到的是监视对你的应用程序的影响,因为它是用Java实现的。 我建议你在你的命令行中加上-XX:+PrintGCDetails ,并检查有没有监控的情况下GC的发生频率。

是的,垃圾(300MB / 5分钟)的速率对JMX来说是正常的。 另外,你的应用程序有多大? 超过32 GB的RAM?


你的记忆行为没有问题。 即使您的应用程序闲置,也会发生许多事情,导致您正在观察的内存分配。 我想你正在监视包括年轻一代在内的整个堆。 因此,分配的每个对象都会显示在您的图表上。 一个年轻的GC每3-4分钟绝对正常,每次只需几个ms。

所以我会转而监测老一代,你会有一条非常平坦的路线,根本没有GC。

链接地址: http://www.djcxy.com/p/81431.html

上一篇: How to monitor garbage collection to see what is GC'd?

下一篇: create and use a temporary heap