tar 的缓冲区占用了太多内存-解决方法?

tar 的缓冲区占用了太多内存-解决方法?

我正在tarUbuntu Server VPS 上压缩一堆文件和目录以进行备份。它只有 1GB 的 RAM 和 128MB 的交换空间(我无法添加更多 - OVH 使用 OpenVZ 作为其虚拟化软件),每次tar运行时它都会使用大量内存作为缓冲区,导致其他所有内容都被交换出去 - 即使在使用时也是如此nice -n 10

有什么方法可以强制tar使用小缓冲区并减少其内存使用量?我担心一旦备份达到一定大小,我的服务器就会因为tar没有足够的内存来容纳缓冲区而崩溃。

我正在使用它bzip2来压缩,并且已经使用该-4选项限制了它的内存使用量。

编辑: 这是htop我运行tar一段时间后的情况:

在此处输入图片描述

以下是完整 gif 的链接

编辑2: 以下是我正在使用的 tar 命令:

nice -n 20 tar --exclude "*node_modules*" --exclude "*.git/*" --exclude "/srv/www-mail/rainloop/v*"  -cf archive.tar /home /var/log /var/mail /srv /etc

答案1

事实上,您的图像显示的恰恰相反。

从 RES 列中可以看出,tar内存消耗相当低。您的 RAM 使用情况出现增加的原因很简单,因为 Linux 正在积极缓存 tar 命令读取的数据。这反过来又会导致内存压力和脏页写回(基本上,系统刷新其写入缓存以适应更大的读取缓存要求),并且可能有用的数据被逐出 I/O 缓存。

不幸的是,它本身似乎tar无法被指示使用 O_DIRECT 或 POSIX_FADVISE(两者都可用于“绕过”缓存)。因此,使用tar它们并不是真正的解决方案……

相关内容