6

我已经在我的 JVM 上安装了 Glowroot(Java 应用程序监控)。当我的应用程序空闲时,我会得到这种内存堆使用情况的图形。图案看起来几乎是均匀的。有人可以解释一下,并指出任何关于为什么图表看起来像这样的博客文章吗?我好奇。

在此处输入图像描述

4

3 回答 3

7

大规模锯齿模式代表 GC 周期之间的内存利用率。应用程序稳定地分配对象(向上倾斜的线),直到堆足够满,VM 可以决定运行 GC(点)。然后 GC 回收大量垃圾(急剧下降)并重新开始该过程。

上下的短尖峰更难理解。向上的尖峰可能代表触发年轻代周期的异常“大”分配(短生命周期对象)。向下的尖峰可能表示响应“内存压力”而释放的缓存对象。

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

于 2017-12-12T07:13:05.257 回答
4

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

但是,由于您正在观察它,JVM 中正在做一些事情来将数据返回给您。这就是为什么您会在许多分析问题中看到无处不在的锯齿图案。下面举几个例子。

java内存泄漏,visualvm显示错误数据

visualvm 监控内存使用情况

于 2017-12-12T07:02:51.443 回答
1

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

您还可以查看这篇文章以获得更深入的解释: 为什么是锯齿形图形?

于 2017-12-12T07:02:29.417 回答