【发布时间】:2015-02-14 10:55:22
【问题描述】:
我被指派在我们的生产环境中查找 Full GC 问题(垃圾收集器)的根本原因。它是随机发生的,我认为最可能的情况是当前应用程序中存在内存泄漏。我希望从我们的生产环境(linux)中获取内存转储,并使用 Eclipse Memory Analyzer 等 GUI 工具进行分析。
要分析的堆转储文件的最佳文件格式是什么?是hprof格式吗?我将使用 jmap 命令获取堆转储。获取内存转储时是否需要指定“format=b”选项?
以下是我将指示我们的支持团队运行的示例命令。 (5980 是一个示例 pid)。
如果您认为有更好的方法,请告诉我。
jmap -dump:format=b,file=hpdump.hprof 5980
谢谢
【问题讨论】:
-
考虑让他们定期运行 jstat 并绘制结果。看看它是否真的是不可预测的。此外,使用 -XX:+HeapDumpOnOutOfMemoryError 运行将使 JVM 在重要时准确地创建转储。第三,在开发服务器上运行这些工具以熟悉结果。更好的是,运行 jvisualvm。
-
分析这样的内存转储是否需要额外的硬件支持?有时 Eclipse 内存分析器会崩溃。
-
内存转储越大,分析起来就越笨拙。因此,如果您之前建议简单地增加内存以查看是否有帮助,现在要求他们向您发送 OOM 错误发生时产生的巨大转储,那么分析器在机器上分析时可能会遇到困难内存更少。