2015-11-20 30 views
0

我一直有问题,我的webapp。我的堆内存峰值达到接近最大值大约30分钟,并使我的系统崩溃。堆内存峰值问题

我已经搜索并尝试几乎所有的东西。我一直在使用Java VisualVM,jconsole和Oracle Java Mission Control监控我的堆内存(我知道它已经过时)。

所以我曾尝试,直到知道:

  1. 监控的堆内存,看看是否有在特定的时间运行特定的线程,它的峰值内存。 (情况并非如此,因为它在特定时间没有特定的峰值。)

2.增加我的堆内存大小。

  • 操作指导:
  • http://karunsubramanian.com/websphere/top-4-java-heap-related-issues-and-how-to-fix-them/

    所以我的问题是:

    是否有任何工具,可以帮我看看,如果我有一个内存泄漏和从哪里? 有没有人遇到同样的问题。 任何关于如何管理这类问题的指针。

    顺便说一句我在这方面很新,所以请客气。 Windows Server 2012中 JAVA 7

    如果您需要更多的信息,

    的Tomcat 7请评论。

    回答

    0

    您需要配置jvm以在发生内存溢出时创建堆转储。

    -XX:+HeapDumpOnOutOfMemoryError 
    

    然后分析堆转储找到什么类使用

    +0

    我已经做到了这一点的记忆,我应该寻找在类或保留内存的大小? –

    +0

    保留内存作为“小”类可以阻止其他几个类的gc。找到支配者 – benbenw

    +0

    它是不是指向任何泄漏可疑(相同对象占用的内存比例较高)? –