Como posso monitorar a carga do disco rígido no Linux?

101

Existe um bom utilitário de linha de comando para monitorar a carga do disco rígido no Linux? Algo como, topmas depois monitorando a atividade do disco, o uso da CPU.

Mais especificamente, suspeito que, para alguns servidores (carga pesada) após várias otimizações em várias partes do (s) programa (s) executado (s), agora o gargalo é simplesmente o log de arquivos no disco. Mas acho muito difícil avaliar quanto tráfego os servidores podem suportar.

Minha ferramenta ideal seria algo que imprime "Você está usando 35% da largura de banda do seu disco agora". Alguma ideia?

Pieter
fonte
1
Pergunta perfeito, é exatamente o que eu estava procurando =)
rafa.ferreira
É possível ler sysfs diretamente, como /sys/block/sda/stat. O campo 1 fornece o número total de leituras, o campo 5 é o número total de gravações, o campo 9 é o número de operações de E / S em andamento. Veja mais em kernel.org/doc/Documentation/iostats.txt Os valores não são assinados por muito tempo e podem ser quebrados.
precisa saber é
Essa é uma pergunta muito boa, porque estamos sempre enfrentando esse problema nos servidores Plesk. No entanto, o que está faltando é how do you do it with SNMP?. É bom fazer login e verificar as coisas, mas é realmente necessário dados históricos.
Eugene van der Merwe 21/03

Respostas:

83

Você pode obter uma boa medida disso usando a iostatferramenta

% iostat -dx /dev/sda 5

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.78    11.03    1.19    2.82    72.98   111.07    45.80     0.13   32.78   1.60   0.64

A utilização do disco está listada na última coluna. Isso é definido como

Porcentagem de tempo de CPU durante o qual as solicitações de E / S foram emitidas para o dispositivo (utilização de largura de banda para o dispositivo). A saturação do dispositivo ocorre quando esse valor está próximo de 100%.

Dave Cheney
fonte
3
Em que pacote ele reside no Debian, se houver? apt-cache dumpnão apareceu nada para o iostat
hBy2Py
9
@ Brian: É no pacote sysstat (através yum de qualquer maneira ...)
Joe
Não foi possível encontrar isso no RHEL 6.5. Isso está disponível para o RHEL?
Hazok
Isso pode funcionar sem ter que continuar com um atraso? Tentar executar uma única instância para obter dados obtém o mesmo número, presumivelmente, pois não pode coletar amostras ???
Wilf
@Hazok Faz parte do RPM do sysstat no RHEL 6.5.
TheGeneral
81

O iotop é uma versão do top que analisa a quantidade de IO que cada processo está usando. Está nos repositórios padrão do ubuntu; Não sei se está no RHEL ou no Fedora, mas deveria estar.

insira a descrição da imagem aqui

Para kernels mais antigos (por exemplo, CentOS 5.x ou RHEL 5.x) que não oferecem suporte ao iotop, use topio (documentado aqui: http://yong321.freeshell.org/freeware/pio.html#linux . Ele conta com / proc // io para estatísticas io e fornece funcionalidade semelhante ao iotop.Veja o link para obter mais detalhes.

Tim Howland
fonte
1
Na verdade, não é instalado por padrão no Ubuntu, por isso, pode-se emitir: sudo apt-get install iotop para obtê-lo
Moshe
1
O iotop requer um kernel superior a 2.6.20, que infelizmente exclui o RedHat el4 e el5.
Dave Cheney
2
A partir do RedHat 5.4, os bits necessários para fazer o trabalho do iotop foram portados de volta. Desfrutar!
Dave Cheney
Está no Fedora :).
51317 jamie
13

Conforme sugerido por sastanin nos comentários, você pode processar diretamente os valores fornecidos em /sys/block/sda/statou /proc/diskstats. Isso pode ser útil quando nenhuma das outras ferramentas mencionadas estiver disponível e você não puder instalá-las facilmente.

Por exemplo (IIUC), algo como isto (no bash) deve fornecer o número de leituras por segundo:

OLD=`awk '{print $1}' /sys/block/sda/stat` # First field is number of read I/Os processed
DT=1
for ii in `seq 1 10`
do
    sleep $DT
    NEW=`awk '{print $1}' /sys/block/sda/stat`
    echo $((($NEW-$OLD)/$DT))
    OLD=$NEW
done

Consulte https://www.kernel.org/doc/Documentation/iostats.txt e https://www.kernel.org/doc/Documentation/block/stat.txt para obter documentação.

Skippy le Grand Gourou
fonte
7

Você deve dar uma olhada no topo , que combina o poder do iotop / top / iftop, tudo em um só lugar, e destaca as partes críticas do seu sistema.

Yvan
fonte
5

Eu recomendaria dar uma olhada na ferramenta nmon. Ele mostrará a carga ativa em vários parâmetros do sistema, bem como a gravação de dados em um arquivo para leitura posterior. É uma ferramenta gratuita disponível aqui :

MikeyB
fonte
5

para descobrir qual é sua largura de banda total, você pode usar hdparm -T /dev/sdapara testar o desempenho do cache de buffer (fileio) hdparm -t /dev/sdapara testar o desempenho de leitura do dispositivo

exemplos: meu laptop obtém 82 MB / s no disco SATA e 2 GB / s no cache. Meu dekstop recebe 12 GB / s do cache e 500 MB / s da matriz HW RAID. Eu suspeito que esses últimos números possam ser o dobro no hardware da classe de servidor.

definir readahead maior que 256, 4096 funciona melhor para mim

for i in 128 256 512 1024 2048 4096 8192 16384 32768  
do  
hdparm --setra $i  
  for j in 1 2 4 8 16 32  
  do  
  time dd if=/dev/sda of=/dev/null bs="$j"k  count=<fixthis> 1GB / blocksize  
  done  
done  

vezes lendo 1 GB em diferentes tamanhos de bloco e diferentes leituras antecipadas

user2987
fonte
Bem-vindo ao SF. Você pode usar o destaque do código em suas postagens colocando aspas em volta de strings ou recuando parágrafos.
22412
Duas coisas - 1) --setraé agora -ae 2), os hdparm -{T,t}comandos emitem apenas leituras de disco, de acordo com strace, portanto não são destrutivas. (
Isenção de
4

A ferramenta padrão para mostrar a carga do disco rígido é iostat.

Não informará quanto% de largura de banda de idade do disco você está usando, pois não sabe quanta largura de banda seu disco possui. De qualquer forma, seu disco possui apenas a citação do fabricante para grandes transferências de dados contíguos.

Alnitak
fonte
3

Eu acho que o RRDtool deve fazer o que você quer aqui, ele usa um daemon para despejar dados do sistema e, em seguida, permite que você processe como quiser. Eu freqüentemente o uso para produzir gráficos, etc., para medir a carga do sistema.

PixelSmack
fonte