Temos um diretório de cache Nginx muito grande (vários GB) para um site ocupado, que ocasionalmente precisamos limpar todos de uma vez. Eu resolvi isso no passado, movendo a pasta de cache para um novo caminho, criando uma nova pasta de cache no caminho antigo e depois rm -rf
inserindo a pasta de cache antiga.
Ultimamente, no entanto, quando preciso limpar o cache em uma manhã movimentada, a E / S de deixa de lado os rm -rf
processos de acesso ao disco do meu servidor, pois o Nginx e o servidor para o qual ele se relaciona exigem muita leitura. Eu posso assistir a média de carga subir enquanto as CPUs permanecem ociosas e rm -rf
absorvem 98-99% do disco IO iotop
.
Eu tentei ionice -c 3
ao invocar rm
, mas parece não ter um efeito apreciável no comportamento observado.
Existe alguma maneira de domar rm -rf
compartilhar mais o disco? Preciso usar uma técnica diferente, a qual seguirá as dicas ionice
?
Atualizar:
O sistema de arquivos em questão é um armazenamento de instância do AWS EC2 (o disco principal é o EBS). A /etc/fstab
entrada fica assim:
/dev/xvdb /mnt auto defaults,nobootwait,comment=cloudconfig 0 2
Respostas:
Todos os dados coletados nesta página. Abaixo estão algumas opções para excluir um grande diretório de arquivos. Confira o artigo para obter detalhes de como isso foi produzido.
* cs1 é contexto alterna voluntário e involuntário
fonte
rsync
está funcionando agora. Talvez seja muito cedo para dizer, e pode ser ajudado que eu não o esteja executando no meio de uma manhã movimentada, mas o servidor ainda responde e a média de carga é gerenciável.ionice -c 3 nice -19 rsync -a --delete /mnt/empty/ /mnt/nginx-cache-old
nice
eionice
, ou pelo menos não destruiu o servidor como orm -rf
fez.A remoção de arquivos realiza apenas operações de metadados no sistema de arquivos, que não são influenciadas pelo ionice.
A maneira mais simples seria, se você não precisar do espaço em disco no momento, executar o
rm
horário fora de pico.A maneira mais complexa como o PODE trabalhar é espalhar as exclusões ao longo do tempo. Você pode tentar algo como o seguinte (observe que ele pressupõe que seus caminhos e nomes de arquivos NÃO contêm espaços!):
Observe também que você não pode usar
rm -f
o primeiro comando, pois o loop não para (depende do código de saída de erro derm
quando não há argumento).Você pode ajustá-lo modificando o número de exclusões por ciclo (100 no exemplo) e a duração do sono. No entanto, pode não funcionar realmente, pois o sistema de arquivos ainda pode agrupar as atualizações de metadados de maneira que você tenha problemas com a carga de IO. Você apenas tem que tentar.
fonte
while
loop parece fazer o truque quandohead -n 50
. 100 ainda estava aumentando lentamente a média de carga acima do crítico, o que me indica que havia muita contenção de recursos.Você pode emparelhá-lo com o comando "nice".
ionice -c 3 nice -19 rm -rf /some/folder
Isso muda a prioridade do processo na máquina.
fonte
nice
parece ter tanto efeito quantoionice
, ou seja, nada apreciável.rm -rf
ficava vazia e 99% ligadaiotop
.