Como posso listar os principais arquivos que consumem E / S?

11

Meu software de gerenciamento de documentos está executando muitas E / S e gostaria de saber quais arquivos ele está acessando mais.

Existe uma ferramenta Linux que me dê a lista dos principais arquivos que consomem IO, como iotop, mas para arquivos, a cada poucos segundos?

Isso pode ser parecido com:

$ thetool
THRPUT   R/W/SWP FILE
40MB/s   write   /usr/alfresco/repo/1283421/1324928.doc
12MB/s   read    /usr/alfresco/cache/3928dh29f8if
11MB/s   read    /tmp/239398hf2f024f472.tmp

Olhei nas páginas man de iotop, lsof, stracee eles não parecem oferecer esse recurso.

Nicolas Raoul
fonte
Você pode escrever um pós-processador para obter essas informações do 'strace', mas até onde eu sei, nenhuma ferramenta existe. (Ferramenta Tal perderia operações que tiveram lugar através de 'mmap'.)
David Schwartz

Respostas:

2

Acho que sua métrica "número de bytes" é a errada. Considere dois acessos. Um lê 10MB de um arquivo. O outro lê cada 512º byte do arquivo nos primeiros 10 MB. O "número de bytes" será 512 vezes maior no primeiro acesso comparado ao segundo. No entanto, ambos colocarão exatamente a mesma carga no subsistema de E / S.

Se você pode aceitar "número de operações", que é tão bom ou tão ruim quanto "número de bytes", então você tem algo que pode realmente medir. O inotifywatchprograma faz isso e provavelmente faz parte do inotify-toolspacote da sua distribuição .

Ele informará imediatamente quais arquivos compõem a maior parte dos acessos e provavelmente permitirá que você resolva seu problema real.

David Schwartz
fonte
O iotop usa MB / s como métrica. O iotop está errado? +1 para sua sugestão do inotifywatch, o exemplo na página de manual é EXATAMENTE o que eu preciso e o que descrevi na minha pergunta. Muito obrigado!
Nicolas Raoul
Certo, mas 'iotop' não consegue identificar arquivos, apenas bloqueia dispositivos. Portanto, isso pode ajudá-lo a identificar o processo do problema e / ou o sistema / dispositivo de arquivos com problema, mas não os arquivos que está acessando. Você pode ter que juntar peças de diferentes ferramentas.
David Schwartz
Hum, interessante, obrigado! Estou brincando com o inotifywatch agora e vou verificar o que posso fazer.
Nicolas Raoul
0

Antes de tudo, para esclarecer: Não existe "IO Consumindo Arquivos" . Arquivos são objetos passivos. São programas que acionam E / S (normalmente lendo / gravando arquivos) e podem acessar arquivos com mais ou menos frequência. Portanto, a taxa de transferência mencionada em relação aos arquivos não teria muito sentido. Uma informação útil sobre arquivos pode ser a frequência com que eles são acessados ​​e modificados. Isso pode ser monitorado usando notifywait -m /some/file/or/directory(de ferramentas inotify ) ou algum sistema mais complexo como FAM ou Gamin .

rozcietrzewiacz
fonte
Eu descreveria essa "taxa de transferência" (outra palavra pode ser mais apropriada, desculpe pelo meu inglês) como a quantidade de bytes lidos / gravados de / para um arquivo específico durante um segundo (soma para cada processo que acessou o arquivo durante esse período) segundo). Espero que faça mais sentido. inotifywait, fam, gamin infelizmente me diz apenas "O arquivo X foi modificado / lido", o que é interessante, mas não é o que estou procurando.
Nicolas Raoul