O comando du leva muito tempo para ser executado


9

Estou executando du -shem uma variedade de diretórios para encontrar porcos em disco. Eu tenho dois servidores idênticos (Dell PE2850s), ambos com RHEL5 e levará muito mais tempo para executar duem um servidor em outro.

Por exemplo, du -sh /opt/foobarlevará 5 minutos no servidor A (que possui cerca de 25 GB) e no servidor B, o mesmo comando com a mesma quantidade de dados será relatado quase instantaneamente. Não vejo nada óbvio ao correr no topo, etc.

Qualquer conselho é muito apreciado.


3
A velocidade de du -snão depende do tamanho dos dados, mas do número de arquivos. As duas árvores de diretório têm um número semelhante de arquivos?
Ladadadada

2
Além disso, dufuncionará muito mais rápido se todos os metadados do diretório (como tamanhos de arquivo) estiverem armazenados em cache no momento. Se esse for o caso por qualquer motivo em um servidor e não no outro, isso resultará em grandes diferenças.
Sven

@Ladadada Eu diria que sim, existe a mesma quantidade de arquivos. Mesmo ao adicionar o asterisco para obter uma lista dos tamanhos de arquivo individualmente, leva muito tempo para rolar. Mas não tenho muita certeza de como verificar se os metadados estão em cache ou não.
Jon Weinraub

Respostas:


6

Se você tiver um grande número de arquivos nesse diretório e o conteúdo do diretório mudar constantemente, a própria entrada do diretório será fragmentada ao longo do tempo. Então, quando o sistema operacional estiver lendo o conteúdo do diretório, haverá muitas e muitas buscas desnecessárias em disco. Isso acontece especialmente com os sistemas de arquivos ext * (o ext4 pode ser melhor) e com os antigos sistemas de arquivos ReiserFS v3.x (se os níveis ultrapassarem 85%).

A solução é bastante fácil:

cp -pr origdir newdir
mv origdir origdir.bak
mv newdir origdir

Obviamente, se tudo estiver armazenado em cache na RAM, isso não importa muito; geralmente o Linux armazena em cache os arquivos e diretórios acessados ​​com frequência de maneira bastante agressiva. Se você realmente deseja manter o conteúdo desses diretórios na RAM, pode colocar algo parecido ls -lah /your/dir 2>&1 >/dev/nullcom o seu cron.

EDIT: Oh, uma coisa surgiu na minha mente. Se o seu servidor tiver um controlador RAID com bateria e com algum cache, verifique se a bateria está OK. Eu já vi situações em que a bateria está descarregada e o controlador desativa completamente o cache, prejudicando muito o desempenho. Por exemplo, os servidores HP podem dizer nos logs do iLO algo sobre a bateria do controlador; no painel de integridade do servidor real, tudo parece estar bem e verde, mas apenas a entrada do log informa sobre isso.


1
Provavelmente, isso levará algum tempo, pois ele está em um servidor de produção, por isso precisarei fazê-lo durante a noite e todo o diretório contém várias centenas de gigabytes de dados, para que eu não queira atolá-lo ... primeira coisa amanhã de manhã. Obrigado pela ideia.
Jon Weinraub

Ainda estou executando este comando e não sei dizer quanto tempo vai demorar. Eu até renicei e o cp ainda está em execução, faz cerca de 1 hora e 15 minutos desde o início. Mesmo executando um du nessa pasta em outro shell demorou muito tempo, mas você acha que eu deveria apenas umountdirigir e fsckisso?
Jon Weinraub

Apenas deixe-o rodar, a menos que isso incomode a sua produção. Com o RHEL5 e seu planejador de E / S CFQ padrão, você pode colocar o comando cp na classe ociosa para que não intimide os outros processos: mais ionice -c3 -p $(pidof cp)ou menos.
Janne Pikkarainen

Por favor, leia também a minha edição mais recente.
Janne Pikkarainen

1
Eu sei que já faz um tempo, mas finalmente consegui executar o comando cp que você mencionou. São duas duas horas para copiar 25 GB. Depois de fazer esse movimento, executar outro du -sh era tão lento quanto. De fato, mesmo a exclusão do diretório de backup também é lenta!
9138 Jon Weinraub

0

Sugiro tentar o comando du simples, sem nenhuma opção. Você verá eventualmente qual diretório está atrasando o processo. Pode ser um disco defeituoso, ou algum outro motivo, ...

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.