O programa “du” pode ser menos agressivo?

21

Temos um trabalho regular que faz du resumos de um número de subdiretórios, escolhendo os piores criminosos, e usamos a saída para descobrir se há coisas que estão subindo rapidamente para detectar possíveis problemas. Usamos diff contra instantâneos para compará-los.

Existe um diretório de nível superior, com um número (algumas centenas) de subdiretórios, cada um contendo 10 de milhares de arquivos cada (ou mais).

Um " du -s " neste contexto pode ser muito IO agressivo, fazendo com que nosso servidor liberte seu cache e, em seguida, grandes picos de IO, o que é um efeito colateral muito indesejado.

Qual estratégia pode ser usada para obter os mesmos dados, sem os efeitos colaterais indesejados?

    
por Danny Staple 28.05.2013 / 12:41

3 respostas

28

Dê uma olhada em ionice . De man ionice :

This program sets or gets the io scheduling class and priority for a program. If no arguments or just -p is given, ionice will query the current io scheduling class and priority for that process.

Para executar du com a classe de E / S "inativa", que é a menor prioridade disponível, você pode fazer algo assim:

ionice -c 3 du -s

Isso deve impedir que du interfira em outros processos de E / S. Você também pode querer considerar renegar o programa para diminuir sua prioridade de CPU, da seguinte forma:

renice -n 19 "$duPid"

Você também pode fazer as duas coisas no momento da inicialização:

nice -n 19 ionice -c 3 du
    
por 28.05.2013 / 12:48
4

Se você tiver toneladas de arquivos em um único diretório, isso pode ser responsável por picos de E / S, já que muitos sistemas de arquivos não lidam bem com grandes árvores de arquivos em um único diretório. Dividi-lo em mais subdiretórios pode ajudar lá. Se você tiver mais de 10 mil arquivos em um único diretório e isso estiver causando problemas, provavelmente você deve dividi-lo.

Quanto ao uso do disco de rastreamento, você pode primeiro analisar df , se o valor de uso não aumentar rapidamente, então os subdiretórios também não o fizeram e você pode pular o du ao mesmo tempo.

Outra alternativa pode ser um sistema de cota de disco que mantém um controle contínuo do uso, se seu sistema de arquivos o suportar.

    
por 28.05.2013 / 13:15
0

Além de ionice , você pode tentar tornar os acessos ao disco mais eficientes. Isto pode ser tentado executando

find /du/root -printf ""
find /du/root -perm 777 -printf ""

primeiro (talvez através de ionice , também). Não funcionará se houver muitos arquivos. Quantos são muitos depende da quantidade de RAM livre.

    
por 29.05.2013 / 01:25