我正在tar
Ubuntu Server VPS 上压缩一堆文件和目录以进行备份。它只有 1GB 的 RAM 和 128MB 的交换空间(我无法添加更多 - OVH 使用 OpenVZ 作为其虚拟化软件),每次tar
运行时它都会使用大量内存作为缓冲区,导致其他所有内容都被交换出去 - 即使在使用时也是如此nice -n 10
。
有什么方法可以强制tar
使用小缓冲区并减少其内存使用量?我担心一旦备份达到一定大小,我的服务器就会因为tar
没有足够的内存来容纳缓冲区而崩溃。
我正在使用它bzip2
来压缩,并且已经使用该-4
选项限制了它的内存使用量。
编辑:
这是htop
我运行tar
一段时间后的情况:
编辑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
它们并不是真正的解决方案……