【问题标题】:jvm free memory space is getting smallerjvm可用内存空间越来越小
【发布时间】:2018-09-28 08:28:20
【问题描述】:

我使用zabbix来监控jvm的空闲内存空间。他的空间不断缩小。这可能是什么原因造成的?我怀疑这是内存溢出。有什么办法可以检查出来吗?有人可以帮我吗?

更新

我重启jvm后,执行了jmap -histo:live这个命令。这里初始化有问题吗?

num     #instances         #bytes  class name
----------------------------------------------
   1:        192100       28118472  [C
   2:         10757       10132704  [B
   3:        101676        8947488  java.lang.reflect.Method
   4:        165148        5284736  java.util.concurrent.ConcurrentHashMap$Node
   5:        187677        4504248  java.lang.String
   6:         19509        3519904  [I
   7:         62802        3014496  org.aspectj.weaver.reflect.ShadowMatchImpl
   8:         57683        2307320  java.util.LinkedHashMap$Entry
   9:         18410        2044672  java.lang.Class
  10:         40274        2016656  [Ljava.lang.Object;
  11:         62801        2009632  org.aspectj.weaver.patterns.ExposedState
  12:         59849        1915168  java.lang.ref.WeakReference
  13:          1342        1774328  [Ljava.util.concurrent.ConcurrentHashMap$Node;
  14:         22572        1753560  [Ljava.util.HashMap$Node;
  15:           920        1576512  [Ljava.nio.ByteBuffer;
  16:         47884        1532288  java.util.HashMap$Node
  17:         26167        1465352  java.util.LinkedHashMap
  18:         10874        1391872  org.aspectj.weaver.reflect.ReflectionBasedResolvedMemberImpl
  19:         49720        1085320  [Ljava.lang.Class;
  20:         45193        1084632  java.util.ArrayList
  21:         13421         966312  java.lang.reflect.Field
  22:         54885         878160  java.lang.Object
  23:         16797         806256  java.util.HashMap
  24:         19297         771880  java.lang.ref.SoftReference
  25:         23315         559560  java.beans.MethodRef
  26:         17695         530192  [Ljava.lang.String;
  27:          6508         520640  java.lang.reflect.Constructor
  28:          8305         465080  java.beans.MethodDescriptor
  29:         23607         459008  [Lorg.aspectj.weaver.ResolvedType;
  30:         17430         418320  org.springframework.core.MethodClassKey

【问题讨论】:

  • 内存泄漏。进行堆转储并检查是什么占用了您的内存。
  • 09-25 10:00 的峰值表明这是垃圾收集发生的时间。如果您查看更大的周期,您会看到锯齿图案吗?如果是这样,那可能只是正常的垃圾收集。
  • 如果您是新手,请使用诸如 Memory Analyzer Tool (MAT) for Eclipse 之类的工具来分析在内存不足后进行的堆转储。
  • @Thomas 对不起。这个我错过了,就是重启了jvm。

标签: java memory jvm zabbix


【解决方案1】:

这看起来像是 Java 应用程序的一个非常正常的内存使用图。正如其中一位 cmets 指出的那样,在 09:00,JVM 运行了垃圾收集器,这导致大量内存被释放。您没有提供用于启动 JVM 的参数,因此不清楚您的堆大小(我猜我会说 2Gb)。 GC 后将可用空间恢复到 1.5Gb 就可以了。随后可用空间的缓慢减少是您的应用程序分配对象以执行它需要执行的任何操作。我的猜测也是,如果您显示应用程序运行时间更长的图表,当 GC 再次运行时,您会再次出现峰值。

简短的回答是这就是 JVM 应该做的。如果应用程序继续运行(即,您没有收到 OutOfMemoryError),那么一切都很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-02
    • 2017-01-28
    • 2012-09-15
    • 2020-09-13
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多