Estou tar
compactando e compactando vários arquivos e diretórios no meu Ubuntu Server VPS para um backup. Ele tem apenas 1 GB de RAM e 128 MB de Swap (não posso adicionar mais - a OVH usa o OpenVZ como software de virtualização) e toda vez tar
que é executado, ele usa uma tonelada de memória para o buffer, fazendo com que todo o resto seja trocado - mesmo ao usar nice -n 10
.
Existe alguma maneira de forçar tar
o uso de um buffer pequeno e reduzir o uso de memória? Estou preocupado que, quando o backup atingir um determinado tamanho, meu servidor cairá porque tar
não terá memória suficiente para seu buffer.
Estou usando bzip2
para compactar e já limitei o uso de memória com a -4
opção.
Edit:
Aqui está o que htop
parece quando eu tar
corri por um tempo:
Aqui está um link para o gif completo
Editar 2: Aqui está o comando tar que estou usando:
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
Sua imagem mostra exatamente o contrário, na verdade.
Como você pode ver na coluna RES,
tar
o consumo de memória é bastante baixo. Seu uso de RAM parece aumentar simplesmente porque o Linux está armazenando ativamente os dados lidos pelo comando tar. Isso, por sua vez, causa pressão de memória e write-back de página suja (basicamente, o sistema libera seu cache de gravação para acomodar o maior cache de leitura necessário) e, possivelmente, dados úteis são removidos do cache de E/S.Infelizmente, parece que
tar
ele mesmo não pode ser instruído a usar O_DIRECT ou POSIX_FADVISE (ambos podem ser usados para "ignorar" o cache). Então, usartar
there não é uma solução real aqui...