【问题标题】:How to find which Class is causing OutOfMemory for the JVM?如何找到哪个类导致 JVM 内存不足?
【发布时间】:2011-02-18 19:09:45
【问题描述】:

我们的 Weblogic 服务器经常因 OutOfMemory 错误而崩溃。有什么方法可以监控 JVM 以找出哪些类正在占用内存并拥有最大数量的对象?

【问题讨论】:

    标签: java jvm weblogic out-of-memory


    【解决方案1】:

    是的。我这样做的方法是配置 jvm 以在 OOM 上创建堆转储,然后我将堆拉下来并通过 jvisualvm 运行它。您可以计算保留的大小(需要很长时间),但很清楚违规者是什么。

    您也可以将 jvisualvm 附加到正在运行的实例,但您需要配置 jvm 以接受连接。这样你就可以实时观察堆的增长。看到这个;它适用于 jboss,但应该非常相似:https://wiki.projectbamboo.org/display/BTECH/VisualVM+Profiler

    我认为在堆转储之后更容易得到答案,因为当你实时观看它时,事情会被垃圾收集等等。

    编辑——这是我的启动配置。

    -XX:+PrintGCDetails -XX:+PrintGCTimeStamps  
    -Xloggc:/path/to/memlogs/memlog.txt -XX:+PrintTenuringDistribution   
    -Xms1024m -Xmx2048m -XX:MaxPermSize=128m   
    -server -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=xxxx   
    -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false   
    -Djava.rmi.server.hostname=<ip-address> -XX:+HeapDumpOnOutOfMemoryError   
    -XX:HeapDumpPath=/path/to/heapdumps/ -XX:+CMSClassUnloadingEnabled   
    -XX:+CMSPermGenSweepingEnabled -XX:+UseConcMarkSweepGC  
    

    因为我将它配置为删除内存日志,所以我可以实时跟踪 memlog.txt 文件以查看发生了什么。如果我愿意,我可以连接到 jvm,但就像我说的那样,我只会在崩溃后分析堆以查看问题所在,因为事实上它真的很清楚......

    【讨论】:

    • 如何配置JVM在OOM上生成heapdump?
    • 我想我需要使用 -XX:+HeapDumpOnOutOfMemoryError 标志。
    【解决方案2】:

    JConsole 从 JDK 1.5(或 5.0,如果你喜欢的话)开始。

    【讨论】:

    • 不幸的是,使用 JConsole,它无法让我看到已加载并占用最多资源的类。我需要它来猜测 OOM 的来源。
    【解决方案3】:

    那里有很多工具,但我使用的是 Eclipse 的内存分析工具包。您可以将它作为独立工具下载,它可以让您进行堆分析,甚至连接到 JVM 并在那里进行分析。

    【讨论】:

      【解决方案4】:

      除了 JConsole,jRat 是一款出色的免费啤酒分析器,YourKit 是另一款出色的商业产品。

      【讨论】:

        【解决方案5】:

        从其他一些问题中我开始了解 jhat 和 jmap。这些已经在 J​​DK 包中可用。以下链接还提供了一个很好的列表,说明在哪些场景中使用哪种工具:-

        http://java.sun.com/developer/technicalArticles/J2SE/monitoring/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-26
          • 1970-01-01
          • 1970-01-01
          • 2020-12-09
          • 2019-11-01
          • 1970-01-01
          相关资源
          最近更新 更多