焦油使用太多的内存缓冲区 – 解决方法?

我正在tar ,然后在我的Ubuntu Server VPS上压缩一堆文件和目录进行备份。 它只有1GB的内存和128MB的交换(我不能再添加 – OVH使用OpenVZ作为他们的虚拟化软件),而且每次运行tar都会使用大量的内存作为缓冲区,导致其他所有内容被交换出去 -即使使用nice -n 10

有没有办法强制tar使用一个小的缓冲区,并减less它的内存使用情况? 我担心,一旦备份达到一定的大小,我的服务器将会closures,因为tar的缓冲区没有足够的内存。

我正在使用bzip2进行压缩,我已经用-4选项限制了它的内存使用情况。

编辑:这是当我有一段时间的tar运行时, htop样子:

在这里输入图像说明

这是一个完整的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 

其实,你的形象恰恰相反。

正如您在RES列中看到的, tar内存消耗非常低。 你的内存使用量似乎会增加,因为Linux正在主动caching由tar命令读取的数据。 这反过来会导致内存压力和页面脏写回(基本上,系统刷新其写入caching以适应更大的读取caching需要),并有可能将有用的数据从I / Ocaching中逐出。

不幸的是,似乎tar本身不能被指示使用O_DIRECT或POSIX_FADVISE(这两者都可以用来“绕过”caching)。 所以,使用tar没有一个真正的解决scheme在这里…