tar usa muita memória para o seu buffer - solução alternativa?

1

Eu estou tar ing e, em seguida, comprimo-me um monte de arquivos e diretórios no meu servidor Ubuntu VPS para um backup. Só tem 1GB de RAM e 128MB de Swap (não posso adicionar mais - a OVH usa o OpenVZ como software de virtualização), e cada vez que tar roda usa uma tonelada de memória para o buffer, fazendo com que todo o resto seja trocado out - mesmo quando usar nice -n 10 .

Existe alguma maneira de forçar o tar a usar um buffer pequeno e reduzir seu uso de memória? Estou preocupado que uma vez que o backup tenha um certo tamanho, o meu servidor irá cair porque tar não terá memória suficiente para o buffer.

Estou usando bzip2 para compactar e já limitei o uso de memória com a opção -4 .

Editar: Aqui está o que é o htop quando tive tar em execução 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
    
por starbeamrainbowlabs 08.07.2015 / 22:03

1 resposta

1

Sua imagem mostra exatamente o contrário, na verdade.

Como você pode ver na coluna RES, o consumo de memória tar é bastante baixo. O uso de RAM aparece para aumentar simplesmente porque o Linux está ativamente armazenando em cache 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 despejados do cache de E / S.

Infelizmente, parece que tar em si não pode ser instruído a usar O_DIRECT ou POSIX_FADVISE (ambos podem ser usados para "ignorar" o cache). Então, usando tar não existe uma solução real aqui ...

    
por 09.07.2015 / 22:14