【问题标题】:Strategies for the diagnosis of Java memory issuesJava内存问题的诊断策略
【发布时间】:2010-09-29 21:59:55
【问题描述】:

我的任务是调试一个 Java (J2SE) 应用程序,该应用程序在经过一段时间的活动后开始引发 OutOfMemory 异常。我是 Java 新手,但有编程经验。我很想听听您对诊断此类问题的好方法的意见?

到目前为止,我已经使用 JConsole 来了解正在发生的事情。我有一种预感,有些对象没有被正确释放,因此在垃圾收集期间没有被清理。

我可以使用任何工具来了解对象生态系统吗?你会从哪里开始?

【问题讨论】:

    标签: java memory garbage-collection jconsole


    【解决方案1】:

    我将从适当的 Java 分析器开始。 JConsole 是免费的,但它的功能远不及花钱的那些。我使用了 JProfiler,物有所值。有关更多选项和意见,请参阅https://stackoverflow.com/questions/14762/please-recommend-a-java-profiler

    【讨论】:

    • 感谢您的提醒。在配置分析器集成大约 30 分钟后,我能够在大约 5 分钟内找到内存泄漏的来源。感谢您的建议。
    【解决方案2】:

    尝试Eclipse Memory Analyzer,或任何其他可以处理Java堆转储的工具,然后使用在内存不足时生成堆转储的襟翼运行您的应用程序。

    然后分析堆转储并查找可疑的高对象计数。

    有关heap dump 的更多信息,请参阅本文。

    编辑:另外,请注意,您的应用程序可能需要比您最初想象的更多的内存。您可以先尝试将 Java 最小和最大内存分配增加到更大的值,然后查看您的应用程序是无限期运行还是只是稍微进一步。

    【讨论】:

    • 我希望我可以直接链接到我在另一个线程中关于 EMA 的评论,但我不能推荐这个。 EMA 能够在不到 5 分钟的时间内打开一个 ~400mb 的堆转储日志文件,而 jhat 在 JVM 崩溃之前花了 70 多分钟来读取它(甚至无法一直打开它)。跨度>
    【解决方案3】:

    最新版本的 Sun JDK 包括 VisualVM,它本身就是 Netbeans 分析器。效果很好。

    【讨论】:

      【解决方案4】:

      http://www.yourkit.com/download/index.jsp 是您唯一需要的工具。 您可以在 (1) 应用程序启动时间和 (2) 在运行应用程序 N 时间后拍摄快照,然后比较快照以查看内存分配的位置。它还将在 OutOfMemoryError 上拍摄快照,以便您可以将此快照与 (1) 进行比较。

      例如,我必须解决的最新项目抛出 OutOfMemoryError 异常,在启动 YourKit 后,我​​意识到大部分内存实际上都分配给了某个 ehcache “LFU” 类,关键是我们指定了某个特定的负载POJO 要缓存在内存中,但我们没有指定足够的 -Xms 和 -Xmx(启动和最大 JVM 内存分配)。

      我也使用过 Linux 的 vmstat,例如一些 Linux 平台只是没有启用足够的交换,或者没有分配连续的内存块,然后是 jstat(与 JDK 捆绑在一起)。

      更新https://stackoverflow.com/questions/14762/please-recommend-a-java-profiler

      【讨论】:

        【解决方案5】:

        您还可以将“UnhandledExceptionHandler”添加到应用程序的线程中。这将捕获“未捕获”异常,例如内存不足错误,并且您至少会知道异常是在哪里引发的。通常这不是问题,而是无法满足的“新”。作为一项规则,我总是将 UnhandledExceptionHandler 添加到线程中,如果没有其他需要添加日志记录的话。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-02-10
          • 1970-01-01
          • 2019-01-29
          • 1970-01-01
          • 1970-01-01
          • 2021-01-11
          • 2010-11-09
          相关资源
          最近更新 更多