Restic: 使用命令行选项减少内存消耗

创建于 2016-02-15  ·  13评论  ·  资料来源: restic/restic

嗨@fd0! 刚刚看完您最近演讲中的视频,该视频链接在博客中,并且真的很喜欢 restic 以及该工具和开发过程背后的哲学。

演讲中曾提到,restic 目前分配了大约 300MB 的 RAM 用于读取多个文件,因此不适合在例如 Raspberry Pi 上运行。 我想知道您是否会考虑添加一个命令行选项来在运行时手动减少该数量,以允许在低内存 ARM 设备上使用 restic。 在无处不在的 RasPi 旁边,我正在考虑备份 Android 和 Sailfish 设备。

optimization repo v2 need triaging feature enhancement

最有用的评论

这方面有什么进展吗? 喜欢 restic,但由于内存耗尽,我的备份不再完成(1.5TB 存储库,使用 ~23G RAM,b2 后端)。 Afaik,目前只能通过修改源本身来修改并发(https://github.com/restic/restic/issues/979#issuecomment-374359647),但这并不是真正可维护的。

所有13条评论

嘿,感谢您对 restic 的关注。 我在演讲中提到的大约 300MiB 的 ram 数量用于两件事(主要):

  • 计算 scrypt(password):scrypt 的常量现在是硬编码的,并且有 #17 可以添加自动计算当前系统的 scrypt 应该有多难的代码
  • 在内存中备份多个 blob/packs 缓冲区:这与允许的最大并发紧密相关。 为此,我还想要自动调整代码,但也可能有命令行选项。

总结一下我上面的观点:它是计划好的,将在某个时间点实施。

听起来不错。 那么我想保持这个问题开放以跟踪该功能。

同意。

我也会从服务器的角度对这个主题感兴趣,所以不一定是低内存但“仍然不够”。 :) 例如,我有一个具有 ~950GB 数据( scanned 64173 directories, 2147728 files in 2:41 )和 2GB RAM 的邮件服务器,我遇到了带有 restic 的 OOM(在ionice -c 3 nice -n 19下运行)。 是否有任何已知数字可用于计算 restic 的内存需求(每个文件/每个 GB/....)? (我在各种不同的 VM 中遇到了带有 restic 的 OOM,知道这些需求会让生活更轻松,如果有任何方法可以减少内存消耗,那就太好了。)

谢谢!

我的经验是大约 4GB 的 RAM 用于 1.5TB 存储库大小(用于备份)。 prune 需要更多(约 9-10GB 的 RAM)。

内存使用主要不取决于特定机器上的数据大小,而主要取决于存储库大小。 因此,如果 restic 存储库本身约为 1TB,则不可能在具有 2GB RAM(无交换)的机器上备份 100KB 文件。

这里:

  • 建造:
    restic 0.8.3 (v0.8.3-11-gda77f4a2) compiled with go1.9.4 on linux/amd64
  • 维度(但我实际上相信这些文件中的大多数——许多存储库克隆、元数据缓存、构建目录等——实际上被排除在外,而 restic 报告的那些数字反映了总量):
    118775 directories 829113 files 129.220 GiB
  • 内存使用:每天运行约3.8G

这方面有什么进展吗? 喜欢 restic,但由于内存耗尽,我的备份不再完成(1.5TB 存储库,使用 ~23G RAM,b2 后端)。 Afaik,目前只能通过修改源本身来修改并发(https://github.com/restic/restic/issues/979#issuecomment-374359647),但这并不是真正可维护的。

在内存使用要求方面有什么变化吗?

我也遇到了这个问题。 2GB 系统 250GB 静态存储库。 跑步:

ionice -c 3 nice -n 19 ~/local/bin/restic -r /mnt/restic -p rk check --read-data-subset 3/7

(也使用 4/14 尝试从 3/7 减少内存使用)需要 1.7G。 完成命令可能需要 10 或 12 个小时,因为糟糕的系统正在交换大脑。 此外,由于交换,该系统对于其他任何事情几乎都没用。

我喜欢休息,但这是不可持续的。

有人可以澄清这个问题的实际建议是什么吗? 我的意思是,如果内存消耗/需求可以更小,为什么我们不应该这样做,而是使用命令行开关来启用使用更少的内存?

我认为如果可能的话,分配更少的空间意味着进程会变慢,所以默认情况下不会这样做?

在内存使用方面已经有了改进,其他一些正在筹备中。
原则上,我赞同@rawtaz的论点,即减少内存使用量将使 restic 可用于更广泛的设备领域。

也就是说,当然有可能进一步降低内存使用量,尤其是速度。 我在 #2794 中开始研究与索引相关的可能性

对此的适当解决方案很可能使用磁盘存储库索引或允许客户端仅加载部分索引,如#1988 中所述。

此页面是否有帮助?
0 / 5 - 0 等级