O programa "du" pode ser menos agressivo?

21

Temos um trabalho regular que faz duresumos de vários 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 diffcontra snapshots para compará-los.

Há um diretório de nível superior, com um número (algumas centenas) de subdiretórios, cada um dos quais pode conter dezenas de milhares de arquivos cada (ou mais).

Um " du -s" neste contexto pode ser muito agressivo de IO, fazendo com que nosso servidor economize seu cache e, em seguida, picos maciços de IO, que são um efeito colateral muito indesejável.

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

Danny Staple
fonte
9
Na Alemanha, você pode substituí-lo por "Sie".
Federico Poloni

Respostas:

28

Dê uma olhada ionice. De man ionice:

Este programa define ou obtém a classe de agendamento io e a prioridade de um programa. Se nenhum argumento ou apenas -p for fornecido, o ionice consultará a classe de agendamento io atual e a prioridade para esse processo.

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

ionice -c 3 du -s

Isso deve parar dude interferir na E / S de outro processo. Você também pode querer renomear o programa para diminuir sua prioridade de CPU, assim:

renice -n 19 "$duPid"

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

nice -n 19 ionice -c 3 du
Chris Down
fonte
5
Para renomear um programa existente, você precisa chamar em renicevez de nice. Para começar ducom os dois ionice e agradável, você pode encadear os dois programas: nice -n19 ionice -c3 du.
Jofel
niceem si também afeta a prioridade do planejador de E / S, não apenas a CPU.
Jordanm #
1
@jordanm Até onde eu sei (pelo menos no Linux), niceafeta apenas a qualidade da CPU (que pode afetar indiretamente a E / S, mas não deve afetar a prioridade do agendador de E / S). Onde você vê esse comportamento? Está documentado em algum lugar?
Chris Baixo
@ChrisDown - Lembro-me de lê-lo em Entendendo o Linux Kernel
jordanm
@ Jordanm Hm, eu tenho esse livro. Eu dei uma rápida olhada nele e só encontrei a página 263 dando detalhes explícitos sobre nice, e ele só fala sobre quantum de tempo base da CPU. Você tem alguma ideia de onde estava o livro? Eu estaria interessado em ler uma fonte autorizada que os Estados-la, não é mencionado em man nice, man 2 nice, man 2 setpriority, info niceou info 'nice invocation'tanto quanto eu posso dizer, o que é estranho, porque alguns deles ir para um pouco de detalhes sobre como as niceobras de chamadas e o que faz.
28413 Chris Down
4

Se você possui vários arquivos em um único diretório, isso pode ser responsável por picos de E / S, pois 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 10k arquivos em um único diretório e estiver causando problemas, provavelmente deverá dividi-lo.

Quanto ao rastreamento do uso do disco, primeiro você pode dar uma olhada df, se o valor de uso não subir rapidamente, os subdiretórios também não poderão e você poderá pular ducompletamente.

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

frostschutz
fonte
O sistema é um farm de construção, portanto, o número de arquivos em um diretório é realmente baixo para os desenvolvedores dos componentes que construímos. dfnão funcionaria bem - o problema é que temos scripts de limpeza, para que possamos ver nenhuma alteração, mas perdemos um aviso prévio para um trabalho automático que está ocupando espaço em disco de forma agressiva. Usamos o zabbix para monitorar o uso geral do disco, mas é essencial conhecer os diretórios individuais em que as coisas estão ficando um pouco malucas.
Danny Staple
0

Além disso, ionicevocê pode tentar tornar os acessos ao disco mais eficientes. Isso pode ser tentado executando

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

primeiro (talvez até ionicetambém). Não funcionará se houver muitos arquivos. Quantas são muitas depende da quantidade de RAM livre.

Hauke ​​Laging
fonte