加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 从运行JVM导出数据?

发布时间:2020-12-15 02:13:05 所属栏目:Java 来源:网络整理
导读:这可能是一个问题的长镜头,但我遇到了一个非常复杂的问题,我不确定如何解决它. 简而言之,我们有一个Java应用程序正在运行,它目前正在使用JDBC在启动时从MysQL数据库中提取数据. 我们已经崩溃了,而且数据库不再是活动的,并且已经永远丢失了,因此数据也随之而
这可能是一个问题的长镜头,但我遇到了一个非常复杂的问题,我不确定如何解决它.

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

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

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

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

所以我今天的问题是:

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

谢谢你的阅读

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读