Java JVM堆使用变化。这张图正常吗?

Java JVM堆使用变化。这张图正常吗?,java,jvm,load-testing,Java,Jvm,Load Testing,这是运行负载测试(Xmx=10g)时预生产服务器的JVM内存使用情况。我有几个问题 垃圾收集器几乎每5分钟运行一次。在这5分钟内,堆已从3GB增长到10GB。这种增长正常吗?如果没有,如何分析我的应用程序中的问题 在两个垃圾回收器周期内,平均堆使用率会逐渐减少并突然增加。原因是什么 在第二条评论中提到的逐渐下降的内部,没有平稳的下降,存在着振动。原因是什么 这种堆利用模式有时被称为“锯”,在您的情况下,它保持一致,因此看起来是健康的。请看一篇文章,它深入探讨了常见的堆利用模式及其问题 答案取决于

这是运行负载测试(Xmx=10g)时预生产服务器的JVM内存使用情况。我有几个问题

  • 垃圾收集器几乎每5分钟运行一次。在这5分钟内,堆已从3GB增长到10GB。这种增长正常吗?如果没有,如何分析我的应用程序中的问题

  • 在两个垃圾回收器周期内,平均堆使用率会逐渐减少并突然增加。原因是什么

  • 在第二条评论中提到的逐渐下降的内部,没有平稳的下降,存在着振动。原因是什么


  • 这种堆利用模式有时被称为“锯”,在您的情况下,它保持一致,因此看起来是健康的。请看一篇文章,它深入探讨了常见的堆利用模式及其问题

  • 答案取决于应用程序代码,对于某些应用程序,这是正常的,而对于其他应用程序,则不是。了解它的唯一方法是了解应用程序在做什么

  • 您很可能正在运行一个并发GC,只要有可用内存,它就不会执行完整的GC周期。锯齿状图案的牙齿可能是从幸存者空间移动到旧空间的活物体

  • 与1相同

  • 您不想看图片,而是想了解一些基本参数并判断它们是否适合您的应用程序:

  • 新空间GC的持续时间和频率是多少

  • 旧空间GC的持续时间和频率是多少

  • 在GC中花费了多少时间

  • GC中使用了多少CPU%

  • GC对应用程序延迟的影响


  • 在我看来,这是正常/合理的GC行为。您只需担心每5分钟的峰值是否向上。即使是向上的趋势,只要没有达到配置的最大堆或完整GC阈值,也不会发出警报。这一点很好。如果您的应用程序有一个(正确实现的)缓存,它可以安全地最大限度地利用内存。问题是,您的数据结构是否不断增长而不受限制;e、 内存泄漏。你好,卡罗尔,非常感谢你的解释。你所指的文件内容丰富,很有用。