为什么AppDynamics或VisualVM之类的APM工具在空闲状态下会显示堆内存峰值?

问题描述 投票:0回答:1

我们正在使用AppDynamics和VisualVM监视我们的应用程序堆内存使用情况。我们在这些问题中看到了类似的图形-thisthisenter image description here

  • 红色框显示空闲的系统堆使用情况-仅当系统处于空闲状态时才会看到峰值,而在未部署任何应用程序时甚至会看到峰值。
  • 绿色箭头指向处于使用状态的实际应用程序-使用系统时,我们看到的堆使用情况报告的相对较少。根据其他SO问题的澄清,如果我们说这是由于垃圾回收造成的,为什么在应用程序使用期间不会出现GC?当系统空闲时,我们会在AppDynamics中看到诸如java.land.String,byte [],int []等系统对象的报告,但是如何找到谁来负责创建它们呢?同样,在空闲状态下进行的堆转储中,当服务器具有专用的-Xmx4g配置时,在使用的500MB内存中仅看到200MB。我们应该如何理解这些观察?
  • heap-memory appdynamics
    1个回答
    0
    投票

    在分析系统空闲状态期间进行的堆转储时,我们仅看到各种WebAppClassLoader持有不同库类的实例。

    [APM专家,例如PlumbrDatadog在APM专家的官方博客中也解释了这种模式,作为正常JVM活动正在发生的JVM的健康迹象,他们解释说,这意味着所有对象都不会永远保留在内存中。 >

    来自Plumbr博客:

    看到以下模式可以确认所讨论的JVM绝对不会泄漏内存。双锯齿模式的原因是,随着新对象的创建(作为常规程序执行的一部分),JVM需要在堆上分配内存。这些对象大多数都是短暂的,很快就会变成垃圾。这些短暂的对象由称为“次要GC”的收集器收集,代表锯齿上的小液滴。

    © www.soinside.com 2019 - 2024. All rights reserved.