为什么堆内存使用图看起来像这样?

时间:2017-12-12 06:57:00

标签: java apm

我已经将glowroot(java应用程序监控)安装到我的JVM上。当我的应用程序闲置时,我得到了这种形式的内存堆使用情况。模式似乎几乎是统一的。有人可以解释并指出我的博客文章,为什么图表看起来像那样?我好奇。

enter image description here

3 个答案:

答案 0 :(得分:3)

看起来像是因为(至少)你在观察它。如果你的应用程序什么都没做,并且没有线程进行任何分配,那么你将获得堆的水平线。

但是,由于您正在观察它,因此JVM中已经完成了将数据传回给您的事情。这就是为什么你会在很多很多分析问题中看到无处不在的锯齿模式。以下几个例子。

java memory leak, visualvm showing wrong data

visualvm monitors memory usage

答案 1 :(得分:3)

大规模锯齿模式可能代表GC循环之间的内存利用率。应用程序正在稳定地分配对象(uploping line),直到堆足够让VM决定运行GC(该点)。然后GC回收大量垃圾(陡峭的下降),然后再次开始。

短暂的上升和下降更难以理解。向上尖峰可能表示触发年轻一代周期的异常“大”分配(短寿命对象)。向下尖峰可能表示缓存的对象被释放以响应“记忆压力”。

如果您想更好地了解峰值,您需要查看GC日志消息,并尝试将它们与图表相关联。

答案 2 :(得分:1)

这是java垃圾收集工作。每个drop都是垃圾收集器,通过删除未使用的引用来释放内存。它再次增长的原因很简单,因为你的应用程序不断创建新的引用。

您还可以查看此帖子以获得更深入的解释: Why a sawtooth shaped graph?