微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 从运行JVM导出数据?

这可能是一个问题的长镜头,但我遇到了一个非常复杂的问题,我不确定如何解决它.

简而言之,我们有一个Java应用程序正在运行,它目前正在使用JDBC在启动时从MysqL数据库提取数据.

我们已经崩溃了,而且数据库不再是活动的,并且已经永远丢失了,因此数据也随之而来,内部非常有价值.

但是,数据仍然存储在正在运行的JVM的堆中.

我现在唯一的希望是以某种方式从正在运行的JVM中提取数据,在理想的世界中我能够附加到它并且可以灵活地运行可以访问内部运行类的代码.

所以我今天的问题是:

>我的方法是否合理且可行?
>如果是这样,我如何附加到JVM和’Inject’代码

谢谢你的阅读

解决方法

看来你想要使用的是jmap命令. jmap可用于将正在运行的JVM的堆转储到文件中,然后可以使用jhat或JVisualVM等工具“脱机”进行分析.

它允许您在不杀死JVM和/或将代码注入其中的情况下这样做,并且由于堆转储文件是“惰性的”,您可以在闲暇时分析它,而不必担心通过进一步探测来损害正在运行的VM.不可否认,我没有广泛使用它,所以我不确定它的功能究竟是什么,但理论上,您也可以使用JVisualVM的OQL语言在堆中的数据上运行自动序列并将其转储为格式的文件你要.

例如,参见this question的使用示例.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐