我正在tar
学习然后在我的 Ubuntu Server VPS 上压缩一堆文件和目录以进行备份。它只有 1GB 的 RAM 和 128MB 的 Swap(我无法添加更多 - 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
实际上,您的图像显示的恰恰相反。
正如您在 RES 列下看到的,
tar
内存消耗非常低。您的 RAM 使用量似乎增加了,这仅仅是因为 Linux 正在主动缓存 tar 命令读取的数据。这反过来又会导致内存压力和脏页写回(基本上,系统会刷新其写入缓存以适应所需的更大读取缓存),并且可能会从 I/O 缓存中清除有用的数据。不幸的是,似乎
tar
无法指示它本身使用 O_DIRECT 或 POSIX_FADVISE (两者都可以用来“绕过”缓存)。所以,tar
在这里使用没有真正的解决方案......