Como liberar memória após o rsync?

2

Eu preciso fazer backup de dados de um servidor da Web com 10 GB de RAM (Ubuntu). Para fazer backup dos dados, uso o Rsync.

Meu primeiro teste foi usar um rsync para todos os sites, mas ele usa 5GB. Então eu decidi dividir o rsync mas ele ainda usa 5GB. Em ambos os casos, consome muita memória e nem sempre é completamente livre após o processo

Se eu solto manualmente o cache entre rsync, ele só usa entre 150Mb e 500Mb completamente livre da memória após o processo. (E livre 50% -70% de memória do servidor)

for CURDIR in "$ROOTDIR"*
do
    echo "Start $CURDIR"    
    rsync -aHh --stats --compress --delete "$CURDIR" --link-dest="saveofyesterday" "saveoftoday"    
    echo "Clear"
    sync
    echo 3 > /proc/sys/vm/drop_caches
    echo "Finish $CURDIR."
done

Parece não ser recomendável. Qual é a maneira correta de conseguir isso?

    
por Inglebard 08.03.2016 / 10:02

2 respostas

5

Eu sugeriria pesquisar no fadvise patch para o rsync. O objetivo é preservar o cache de disco durante o backup. Efeito você deve ver essa memória que você considera como 'usado' não será 'usado'. Na realidade, essa memória que você considera usada é usada, mas é usada para cache de disco e será liberada, se necessário, pelos programas. Se o sistema estiver com pouca memória, eventualmente, todo o cache de disco será despejado da memória para tentar fornecer memória para aplicativos necessitados. Isso é ruim, especialmente em sistemas ocupados que não possuem um sub-sistema de disco extremamente rápido, pois uma vez que o cache de disco é despejado da memória, todos os dados em cache precisarão ser lidos novamente do disco, o que causará um enorme carregamento de IO e tempos de espera. / p>

Eliminar o cache manualmente é tão ruim quanto o servidor ficará em dificuldades. Este não é um caminho aconselhável para ir. O gerenciamento de memória não é algo com o qual o seu script deva se preocupar, o kernel cuida dessa parte.

    
por 08.03.2016 / 10:16
1

Parece que o que você quer fazer é executar um processo e limitar a quantidade de efeito que pode ter no cache do sistema de arquivos, para que ele não crie um problema de "vizinho barulhento".

Você pode colocar o rsync em um contêiner e limitar o tamanho da memória. Isto é basicamente como fadvise em esteróides.

Criar um contêiner desse tipo é complexo. Por sorte, há uma ferramenta que fará o trabalho para você chamado LMCTFY: link

Com o lmctfy, você pode criar um container com um limite de memória como este:

lmctfy create mycontainer "memory:{limit:100000000}"
lmctfy run mycontainer "rsync ..."
lmctfy destroy mycontainer
    
por 08.03.2016 / 14:54