有人能告诉我javacore、线程转储和堆转储之间的确切区别吗?这些都是在什么情况下使用?
发布于 2010-08-31 18:40:32
线程转储是所有活动线程堆栈的转储。因此,对于分析应用程序在某个时间点的运行情况很有用,如果以一定的时间间隔完成,则有助于诊断某些类型的“执行”问题(例如,线程死锁)。
堆转储是Java堆内存状态的转储。因此,对于分析应用程序在某个时间点的内存使用情况非常有用,因此在诊断某些内存问题时非常方便,如果每隔一段时间进行,则在诊断内存泄漏时也很方便。
这就是他们的“原始”术语,并且可以通过许多方式提供。通常用于描述来自JVM和应用程序服务器的转储文件,在这种形式下,它们是一个低级工具。如果由于某些原因你不能得到任何其他东西,但你会发现使用像样的分析工具来获得类似的但更容易剖析的信息会更容易。
对于WebSphere来说,javacore文件是一个线程转储文件,尽管它包含很多其他信息,比如锁和加载的类以及一些有限的内存使用信息,而PHD文件则是堆转储。
如果您想要读取一个javacore文件,您可以手动完成,但是有一个IBM工具(BM Thread and Monitor Dump Analyzer)可以使它变得更简单。如果您想要读取堆转储文件,则需要许多IBM工具中的一个: MDD4J或heap Analyzer。
发布于 2017-08-13 14:10:05
JVM头转储是给定时间内JVM堆内存的快照。所以它只是JVM的一个堆表示。这就是对象的状态。
JVM线程转储是JVM线程在给定时间的快照。这就是线程在任何给定时间所做的事情。这是线程的状态。这有助于理解诸如锁定线程、挂起线程和正在运行的线程。
头部转储比线程转储具有更多的java类级信息。例如,头转储可以很好地分析JVM堆内存问题和OutOfMemoryError错误。当发生像OutOfMemoryError这样的事情时,JVM头转储会自动生成。可以通过使用kill -3杀死进程来手动创建堆转储。生成堆转储是一项密集的计算任务,这可能会挂起您的jvm。所以这不是一种好用的方法。堆可以使用诸如eclipse内存分析器之类的工具进行分析。
核心转储是对象的os级存储器使用。它有比头转储更多的信息。当我们故意杀死一个进程时,不会创建核心转储。
发布于 2009-08-25 11:32:27
堆转储-内存不足错误堆转储-内存中对象的图片-用于内存分析核心-也称为线程转储或Java转储,用于查看给定时间的JVM线程活动。除了线程和堆栈之外,IBM javacores还应该提供许多额外的信息--用于确定挂起、死锁和系统内核性能下降的原因。
https://stackoverflow.com/questions/1300497
复制相似问题