我有一个大的(5GB)HPROF转储,由应用程序创建时OutOfMemoryError
发生。 (使用XX:HeapDumpOnOutOfMemoryError )。
不幸的是有没有这个的时候发生错误收集的日志。 重新创建这将需要几个小时。 我希望,如果一些工具可以显示异常堆栈跟踪或全部线程栈HPROF等。
我目前使用的MAT ,看不到的方式来获得线程信息。 哪一种工具,我可以使用?
(我不知道如果HPROF文件包含有关OOM发生时线程/呼叫的位置信息)。
(我不知道该如何采取线程转储在正常情况下,这里的问题是事件已经发生了,我只有在HPROF转储。)
MAT可以直接显示现在的线程 (也许这是因为加入的问题被问)。
主题概述
在堆转储获得所有线程的概述使用“主题概述”工具栏中的按钮,下面的图片,如图所示。 另外一个可以使用查询浏览器>线程概述和堆栈查询:
我不认为堆转储包含了除GC根线程的信息。 如果您需要线程相关的信息,你需要采取线程转储也。
Eclipse的MAT可以让你看到可疑的线程在泄漏嫌疑人报告。 请在您的应用程序命名空间中的类与它们的行号找到他们堆了多少内存占用。 这会给你漏类的提示。
你可以杀死-3进程ID获得线程转储到标准输出。 这不会杀死的java程序,所以你可以根据需要做多次。
作为RC规定的VisualVM是一个很好的工具,这将给你的对象类类型计数和各类图表和分析工具。
使用VisualVM的。
尝试烫发时堆空间超过分析图...ü还应检查存储器样本并保存其快照..
分析线程堆栈......会帮你缩小的问题。
要打开的选项你的需要+
,并关闭你需要一个选项-
什么是混淆有关文档的是,它显示了默认设置,使之“清”是什么设置,您已经。 与+的那些是在默认情况下并用的 - 默认是关闭。 这意味着如果你复制任何的+或 - 从他们应该什么都不做(除了默认已随时间变化)的文档选项
-XX:-HeapDumpOnOutOfMemoryError关闭堆转储,这是默认的。
-XX:+ HeapDumpOnOutOfMemoryError打开堆转储。