【问题标题】:In Java, How to save current state of process, save it to binary file and then execute the that binary to load to memory? [closed]在Java中,如何保存进程的当前状态,将其保存到二进制文件中,然后执行该二进制文件以加载到内存中? [关闭]
【发布时间】:2021-01-28 00:18:43
【问题描述】:

我一直在使用一些自定义 Java 代码处理 AWS Lambda 函数。它的代码必须获得较长的执行时间,但 Lambda 的执行超时最长为 900 秒。所以我打算在超时之前将进程的内存状态作为文件保存到 S3,然后在下一次执行时加载该文件以从 S3 执行。

如何将进程的所有状态保存到文件中,然后从保存的进程状态加载执行?

【问题讨论】:

  • 你的问题太宽泛了。这就像在问“有人可以告诉我如何从头开始制造汽车”。整本书都是关于将应用程序状态序列化为文件的主题。
  • 这个需求没有通用的解决方案。 Java 不支持应用程序检查点。当然,可以以允许对特定计算设置检查点的方式实现任何算法。但是你需要自己实现这个......在Java中没有通用的“配方”。

标签: java amazon-web-services aws-lambda process


【解决方案1】:

您的 JRE 不支持这种有风险的功能,但如果您要运行无关的任务,我不建议您保存进程状态。如果您可以添加一些代码和详细信息,您将获得更精确的问题解决方案,但是一些基本指针......

  1. 确保您用来处理数据的函数可以动态暂停和启动
  2. 编写函数以任何格式(json、csv 等)保存/加载文件中的数据
  3. 编写一个函数来识别您的 dp 任务何时完成
  4. 硬编码限制了加载、处理和写入的顺序
  5. 批量处理该过程,直到您收到通知它已完成

再一次,这个问题真的很模棱两可,所以我的回答可能根本不是你需要的。无论哪种情况,您要保存的是数据,而不是流程。从理论上讲,计算机本身能够在汇编中保存所有寄存器、堆栈和程序计数器的状态,但这是一个很大的不,因为很多原因并不是本讨论的一部分

【讨论】:

    【解决方案2】:

    对不起,我向你提出了模棱两可的问题!

    我知道应用程序基本上如何将其数据保存到文件并在下一次运行时恢复。 但我关于这个问题的工作是将 Lambda 处理程序包含在 ETL 迁移作业应用程序中,该应用程序必须花费超过 Lambda 最大超时的时间。

    我已经开发了 Lambda 处理程序构建框架,能够包含 ETL 作业并将处理程序部署到 lambda 函数,但我没有解决 Lambda 超时问题。

    同时,我想到了类似“jmap”的工具。我只是猜测如果'jmap'可以转储堆内存,即使它可以从转储文件中恢复。

    作为集体思考,我的猜测没有办法解决这个问题。 所以我希望更好地在 ETL 工作中制作应用程序数据存储架构。

    由于ETL作业程序是由其他ETL解决方案构建的,我觉得有些不便。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 2015-11-24
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      相关资源
      最近更新 更多