【问题标题】:Constant memory dumps持续的内存转储
【发布时间】:2014-12-29 12:47:58
【问题描述】:

是否可以不断转储进程的内存来记录正在发生的每一个变化?例如,如果我有一个修改数组内容的程序,我想在修改之前知道该数组的内容。我想一个程序可以保存初始内存,然后保存文件中的所有更改,我只需通过我知道的数组的修改内容来搜索文件。然后我会在那一刻之前查找该特定内存位置的更改并找到初始内容。 有这样的程序吗?如果是这样,您会推荐什么程序?

编辑:我用 C++ 编写了一个程序,该程序使用 pcap 捕获另一个进程的数据包,我想知道这些数据包是如何在该程序中构造的。我正在使用 Windows。

【问题讨论】:

标签: memory dump


【解决方案1】:

请注意,内存内容正在(或可能)比磁盘能够写入的内容快得多。

另外,您的问题是特定于操作系统的。我猜你使用的是 Linux。

在所有情况下,尽早根据您的目标设计您的应用程序。

也许您正在寻找application checkpointing。如果在 Linux 上,请考虑 BLCR

也许您正在寻找一些persistence 机制。一种可能的方法可能是在程序中的某些点显式保留应用程序的状态,这些点经常执行。 call stackcontinuations 的持久性是一个难题

您可能希望对serialization 使用文本格式(如JSON)。您可能对数据库技术感兴趣,无论是关系 SQL(例如 SqlitePostGreSQL)还是 noSQL mongodb

持久性和检查点可能与garbage collection 算法有关(特别是复制GC)。

一些语言实现能够持久化它们的整个堆。例如,在Common Lisp 中,SBCL 实现提供了save-lisp-and-die

对于调试,您可能需要watchpointsgcore(1) 命令。

请注意,如果您 fork(2) 您的进程并立即休眠或闲置您在该子进程中保留的子进程,则为您的地址空间的快照。

另请阅读 transactional memoryACID properties

【讨论】:

    猜你喜欢
    • 2012-12-11
    • 2021-04-29
    • 2016-06-11
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    相关资源
    最近更新 更多