繁体   English   中英

是否可以从堆转储中实例化jvm?

[英]Is it possible to instantiate a jvm from a heap dump?

每个人都知道可以从正在运行的JVM获取堆转储。 另一种可能吗? 我们可以使用堆转储启动JVM吗?

我很长一段时间都在考虑这个问题。 如果这是可能的话,它将解决大量时间并使支持工程师的思维变得容易。 如果我们必须重新创建客户面临的一些罕见问题,它可以帮助您节省大量时间。 [想象一下底层硬件和Java运行时是相同的,并且所有支持文件也存在于文件系统中的相应位置]。

补充说明:执行此操作的意图不是在OOM发生时,而是在JVM启动后的任何给定点。

不,你不能 您需要每个打开文件中的当前位置等内容。 这会影响简单顺序读取时返回的数据。 恢复程序需要打开每个文件并将其置于正确的位置。 对于不可搜索的流,这可能是不可能的。

程序特定的序列化是一个更可行的路径,然后从那里设置程序。

此外,由于Heap Dumps通常来自OutOfMemory situtaions,从同一个JVM重新创建JVM会再次抛出OutOfMemoryException。 如果你在两者之间进行堆转储,那么序列化你的对象并在你启动jvm时恢复它们。

(从这个问题的评论复制的内容,作者almas-shaikhpatricia-shanahan

我认为您正在寻找Java Mission ControlChronon DVR (商业)等工具。 这些可以帮助您进行事件分析,事件收集和分析,时间旅行调试(由chronon表示)

根据他们的文件:

Java Mission Control

Java Flight Recorder和Java Mission Control共同创建了一个完整的工具链,可以连续收集低级和详细的运行时信息,从而实现事后事件分析。 Java Flight Recorder是Oracle JDK中内置的分析和事件收集框架。 它允许Java管理员和开发人员收集有关Java虚拟机(JVM)和Java应用程序的行为的详细低级信息。 Java Mission Control是一套先进的工具,可以对Java Flight Recorder收集的大量数据进行高效,详细的分析。 该工具链使开发人员和管理员能够从本地运行或部署在生产环境中的Java应用程序中收集和分析数据。开始使用Oracle JDK 7 Update 40(7u40)

Chronon Recording Server的一些主要功能在您的情况下非常有用:

录制服务器专为长时间运行的服务器端应用程序而设计,这些应用程序一次运行数周或数月。 如果录制过大并且清除旧录制内容,录制服务器将负责拆分录制内容。

摆脱需要查看冗长详细的日志文件来调试程序。 只需回放整个执行过程,即可确切了解程序中发生的情况。 录制服务器使其在团队成员或多个团队之间的不同计算机上共享录制内容。

要从正在运行的JVM创建堆转储,您还可以使用jhat或jcmd(使用GC.heap_dump命令),这两者都存在于JDK / bin文件夹中。 MAT是分析转储内容的一种方式。 Java Mission Control有一个名为JOverflow的工具,用于分析堆转储,但仅用于查看内存浪费模式。

我从来没有听说过任何从某种形式重新启动JVM的方法,堆转储根本就不够,因为它只包含Java对象,而不包含已编译的代码和其他东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM