Memory 堆转储根类

Memory 堆转储根类,memory,jvm,heap,dump,garbage-collection,Memory,Jvm,Heap,Dump,Garbage Collection,我们的生产系统将进入无限循环的完整gc和内存下降,在短短2分钟内从8Gig下降到1MB 在获取堆转储后,它告诉我有一个java.lang.Object([Ljava.lang.Object)数组,其中数百万java.lang.String对象具有相同的字符串,占据了堆的99% 但是它没有告诉我哪个类引用这个数组,所以我可以在代码中修复它 我使用jdk6上的jmap工具进行堆转储,并使用JProfiler、NetBeans、SAP Memory Analyzer和IBM Memory Analyz

我们的生产系统将进入无限循环的完整gc和内存下降,在短短2分钟内从8Gig下降到1MB

在获取堆转储后,它告诉我有一个java.lang.Object([Ljava.lang.Object)数组,其中数百万java.lang.String对象具有相同的字符串,占据了堆的99%

但是它没有告诉我哪个类引用这个数组,所以我可以在代码中修复它

我使用jdk6上的jmap工具进行堆转储,并使用JProfiler、NetBeans、SAP Memory Analyzer和IBM Memory Analyzer,但这些都不能告诉我是什么导致了这个庞大的对象数组???…比如哪个类引用它或包含它


我是否必须使用不同的配置进行不同的转储才能获得该信息?…或者其他任何可以帮助我找到导致该信息的罪魁祸首类的东西…这将非常有帮助。

我过去使用过SAP Memory Analyzer,它是查找“贪婪内存猪”的非常好的工具


也许下面的演示会有所帮助:。

您是否尝试通过源代码和类简单地grep此字符串?

我以前使用过查找类似问题的方法。通常,当问题简单明了时,很容易找到罪魁祸首,但需要一些时间才能习惯这些术语。如果没有实际的转储,我无法找到告诉您是什么导致了这个问题。也许您应该看看这个字符串实际包含的内容,它从哪里来?

我使用了YourKit并将它附加到一个生产节点上,并且能够使用references.Thx for suggestion.Yep.获得完整的堆转储。但是它传递了一些输入值。