Estou interessado em um utilitário ou processo para monitorar E / S de disco por arquivo no CentOS.
No Win2008, o utilitário resmon permite esse tipo de detalhamento, mas nenhum dos utilitários Linux que eu encontrei faz isso (iostat, iotop, dstat, nmon).
Meu interesse em monitorar gargalos de E / S em servidores de banco de dados. Com o MSSQL, achei um diagnóstico informativo saber quais arquivos / espaços de arquivos são os mais atingidos.
Respostas:
SystemTap é provavelmente a sua melhor opção.
Aqui está como a saída do exemplo iotime.stp se parece:
A desvantagem (além da curva de aprendizado) é que você precisará instalar o kernel-debug , o que pode não ser possível em um sistema de produção. No entanto, você pode recorrer à instrumentação cruzada em que compila um módulo em um sistema de desenvolvimento e executa esse .ko no sistema de produção.
Ou, se estiver impaciente, consulte o Capítulo 4. Scripts úteis do SystemTap do guia para iniciantes.
fonte
Script SystemTap * :
A saída é assim:
Ou se você optar por exibir apenas o caminho do ponto de montagem:
Limitações / bugs:
devname
é"N/A"
devname
é"N/A"
Os resultados para os programas de Matthew Ife :
para mmaptest private:
para mmaptest compartilhado:
para dioteste (E / S direta):
* Instruções de configuração rápida para RHEL 6 ou equivalente:
yum install systemtap
edebuginfo-install kernel
fonte
task_dentry_path
) :-) Não faço ideia sobre a E / S, mas posso testá-lo se você me der um comando ou um programa de amostra. Por exemplo, usei o Python para testar o mmap.dd iflag=direct oflag=direct
Aparece.Você realmente gostaria de usar
blktrace
para isso. Consulte Visualizando o Linux IO com Seekwatcher e blktrace .Vou ver se posso postar um dos meus exemplos em breve.
Editar:
Você não menciona a distribuição do Linux, mas talvez esse seja um bom argumento para um script dtrace no Linux ou mesmo no System Tap , se você estiver usando um sistema semelhante ao RHEL.
fonte
A única ferramenta que conheço que pode monitorar a atividade de E / S por arquivo é
inotifywatch
. Faz parte doinotify-tools
pacote. Infelizmente, ele apenas fornece contagens de operação.fonte
use iotop para obter os PIDs de processos que contribuem com alta IO
executar strace no PID gerado, você verá quais arquivos estão sendo acessados por um processo específico
fonte
Eu finalmente usei o Sysdig para isso
fonte
csysdig
, pressione F2 e selecioneFiles
Visualizar. Você verá o topo dos arquivos acessados pela coluna OPS (pode ser alterada pressionando F9).csysdig -v files
vai diretamente para a visualização "Arquivos"Eu diria que você pode ter feito a pergunta errada. se você estiver procurando por gargalos de E / S, pode ser igualmente importante ver o que está acontecendo no seu disco. Os db's são notórios por fazerem E / S aleatórias, o que pode reduzir significativamente a taxa de transferência, especialmente se você tiver apenas alguns eixos.
o que pode ser mais interessante é ver se você está tendo longos tempos de espera nos próprios discos. você pode fazer isso com collectl através do comando "collectl -sD", que mostrará estatísticas de desempenho de disco individuais. São --home para transformá-lo em um utilitário top-like. Se houver muitos discos envolvidos, execute-o via colmux: colmux -comand "-sD" e ele permitirá que você classifique por uma coluna de sua escolha, mesmo em vários sistemas.
fonte
Você pode monitorar a E / S por dispositivo de bloco (via / proc / diskstats) e por processo (io contabilizando via
/proc/$PID/io
ou taskstats ), mas não conheço uma maneira de fazê-lo por arquivo.fonte
Pode ser inotify resolverá resolver isso.
A API inotify fornece um mecanismo para monitorar eventos do sistema de arquivos. O Inotify pode ser usado para monitorar arquivos individuais ou para monitorar diretórios. Quando um diretório é monitorado, o inotify retornará eventos para o próprio diretório e para arquivos dentro do diretório.
Monitorar a atividade do sistema de arquivos com o inotify
Referência inotify
fonte
lsof
)Embora haja muitas informações boas nas respostas aqui, estou me perguntando se é realmente aplicável.
Se você está falando sobre arquivos nos 10s de gigabytes, sendo constantemente gravados, a menos que sejam arquivos de log ou similares que são constantemente anexados (nesse caso, apenas monitore o tamanho dos arquivos), é mais provável que os arquivos sejam mmap'd . Se for esse o caso, a melhor resposta pode ser que você deve parar de procurar a maioria das soluções. A primeira coisa que você deve perguntar a qualquer outra solução proposta é "funciona com mmap", porque na maioria das vezes eles não funcionam? Entretanto, você pode transformar o problema em monitorar um dispositivo de bloco em vez de monitorar um arquivo.
Quando um programa solicita uma página de um arquivo mmap'd, está apenas referenciando um local na memória virtual. Essa página pode ou não já estar na memória. Se não for, isso gera uma falha de página, que aciona a página que está sendo carregada do disco, mas isso acontece no sistema de memória virtual, que não é facilmente vinculado a um processo de aplicativo específico ou a um arquivo específico. Da mesma forma, quando seu aplicativo atualiza uma página mmap'd, dependendo dos sinalizadores, isso pode não acionar uma gravação imediata no disco e, em alguns casos, pode não ir ao disco (embora, presumivelmente, esses últimos não sejam os casos de seu interesse) em).
O melhor que posso pensar em arquivos mmap'd, se for viável para você, é colocar cada um dos arquivos de interesse em um dispositivo separado e usar as estatísticas do dispositivo para coletar suas informações de uso. Você pode usar partições lvm para isso. Uma montagem de ligação não funcionará, pois não cria um novo dispositivo de bloco.
Depois de ter seus arquivos em dispositivos de bloco separados, você pode obter estatísticas de / sys / block / * ou / proc / diskstats
Pode ser muito perturbador introduzir isso em um servidor de produção, mas talvez você possa usá-lo.
Se os arquivos não estiverem mapeados, sim, você pode escolher uma das outras soluções aqui.
fonte
Recentemente, eu estava mexendo com collectl , parece uma ótima ferramenta e bastante simples de instalar. O mais interessante é que você pode descobrir qual é o processo responsável pelos gargalos de IO. Eu recomendo que você leia Usando o Collectl , pode ser útil.
fonte
Eu recomendo que você verifique http://dag.wieers.com/home-made/dstat/ . Esta ótima ferramenta permite verificar muitas estatísticas.
fonte
Eu acho que o iotop é uma das melhores ferramentas no Linux para identificar gargalos no IO.
fonte
iotop
não monitora por arquivo, ele funciona por processo