如何让 tar 使用常量内存?

如何让 tar 使用常量内存?

我需要压缩多个文件夹 (>32GB) 中的多个文件,之前我们通过代码压缩的方式占用了太多内存,所以我改用了tar。我使用了 tar 和 lz4

tar -I lz4 -cf foo.tar.lz4 -C [dir that contains all folders] [all folders to compress]

并使用以下命令解压缩:

tar -I lz4 -xf foo.tar.lz4 -C [target dir]

我们通过 Python 子进程执行这个 tar 命令。

结果相当令人失望,压缩时间并没有改善(即使 lz4 应该比 zip 更快,特别是在提取时),但更大的问题是内存消耗;据我所知,tar 应该使用常量内存,但我们发现它使用了超过 32 GB 的内存。

我做错了什么吗?如何让 tar 流式传输文件而不是将它们全部加载到内存中?

我们正在使用 Ubuntu LTS。

答案1

Tar 可能使用常量内存,但 Linux 则不然。

您的 RAM 使用量可能看起来有所增加,因为 Linux 正在积极缓存 tar 命令读取和写入的数据,直至达到内存的限制。

不幸的是,它本身似乎tar无法被指示使用 O_DIRECT 或 POSIX_FADVISE(两者都可以用来“绕过”缓存)。

相关内容