我使用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
答案 0 :(得分:0)
这看起来像Java应用程序的非常正常的内存使用情况图。正如其中一项评论所指出的那样,JVM在09:00运行了垃圾回收器,这导致释放了大量内存。您没有提供用于启动JVM的参数,因此尚不清楚堆的大小(猜测我会说2Gb)。 GC后将可用空间恢复到1.5Gb很好。随后,可用空间的缓慢减少是您的应用程序分配对象以执行其所需的任何操作。我的猜测还可能是,如果您显示应用程序的图形运行时间更长,则当GC再次运行时,还会出现另一个峰值。
这么短的答案就是这应该是JVM要做的。如果应用程序继续运行(即您没有收到OutOfMemoryError),那么一切都很好。