Esse é um problema simples, mas a primeira vez que tive que corrigi-lo: descobrir quais arquivos / inodes específicos são os alvos da maioria das E / S. Eu gostaria de obter uma visão geral do sistema, mas se eu tiver que fornecer um PID ou TID, estou bem com isso.
Eu gostaria de ir sem ter que fazer um strace
programa que aparece iotop
. De preferência, usando uma ferramenta na mesma linha que iotop
uma que especifica por arquivo. Posso usar lsof
para ver quais arquivos o mailman abriu, mas não indica qual arquivo está recebendo E / S ou quanto.
Já vi em outros lugares onde foi sugerido o uso, auditd
mas eu preferiria não fazer isso, pois colocaria as informações em nossos arquivos de auditoria, que usamos para outros fins e isso parece um problema que eu deveria poder pesquisar nesse caminho.
O problema específico que tenho no momento é o preenchimento rápido de instantâneos do LVM. Desde então, resolvi o problema, mas gostaria de poder corrigi-lo dessa maneira, em vez de apenas fazer um ls
em todos os descritores de arquivos abertos /proc/<pid>/fd
para ver qual deles estava crescendo mais rápido.
fonte
fatrace
anterior, algo como o script que escrevi deveria foram oferecidos, pois é mais amplamente utilizável.Respostas:
Existem vários aspectos dessa questão que foram abordados parcialmente por meio de outras ferramentas, mas não parece haver uma única ferramenta que forneça todos os recursos que você procura.
iotop
Essa ferramenta mostra quais processos estão consumindo mais E / S. Mas falta opções para mostrar nomes de arquivos específicos.
Por padrão, ele faz o que faz regularmente
top
nos processos que disputam o tempo da CPU, exceto na E / S do disco. Você pode convencê-lo a fornecer uma visão de 30.000 pés usando o-a
comutador para que ele mostre um acúmulo por processo ao longo do tempo.Ferramentas i * (inotify, iwatch, etc.)
Essas ferramentas fornecem acesso aos eventos de acesso a arquivos, mas precisam ser direcionadas especificamente para diretórios ou arquivos específicos. Portanto, eles não são tão úteis ao tentar rastrear um acesso não autorizado a arquivos por um processo desconhecido, ao depurar problemas de desempenho.
Além disso, a
inotify
estrutura não fornece detalhes sobre os arquivos que estão sendo acessados. Somente o tipo de acesso, portanto, nenhuma informação sobre a quantidade de dados sendo movida para frente e para trás está disponível, usando essas ferramentas.iostat
Mostra o desempenho geral (leituras e gravações) com base no acesso a um determinado dispositivo (disco rígido) ou partição. Mas não fornece nenhum insight sobre quais arquivos estão gerando esses acessos.
blktrace
Esta opção está com um nível muito baixo. Falta visibilidade sobre quais arquivos e / ou inodes estão sendo acessados, apenas números de blocos brutos.
fatrace
Esta é uma nova adição ao Kernel Linux e uma bem-vinda, portanto, é apenas em distros mais recentes, como o Ubuntu 12.10. Meu sistema Fedora 14 estava faltando 8-).
Ele fornece o mesmo acesso que você pode obter
inotify
sem precisar direcionar um diretório e / ou arquivos específicos.A descrição acima mostra o ID do processo que está acessando o arquivo e qual arquivo está acessando, mas não fornece nenhum uso geral da largura de banda; portanto, cada acesso é indistinguível de qualquer outro acesso.
Então o que fazer?
A
fatrace
opção mostra a maior promessa para FINALMENTE fornecer uma ferramenta que pode mostrar o uso agregado de E / S de disco com base nos arquivos que estão sendo acessados, em vez dos processos que estão acessando.Referências
fonte
fatrace
e não o desenvolveria muito. Realmente aprecio como você se esforça para garantir que as pessoas entendam o cenário completo e desejem poder fazer mais do que apenas votar e dar recompensa.yum
puxei as bibliotecas do python3 por algum motivo. Eu fiz umfile
e parece que é um executável ELF.ldd
não mostra nenhum link parapython
nem o fezstrings
. Alguma idéia de por que se incomodou com python3?iotop
e dasiostat
ligações. Além disso, eu descobri a coisa do python, parece que (no Fedora 18 pelo menos) existe umpython
script "power-use-report", entãoyum
estava apenas respondendo ao fato depython
estar nas dependências do RPM. Então esse mistério em particular é resolvido.Ainda não recebi uma resposta, mas escrevi esse script (no final) e parece fazer o que quero. Não testei em outros sistemas e é específico do Linux.
Basicamente, ele permanece
strace
por 30 segundos, filtrando as chamadas do sistema relacionadas a arquivos e faz um esforço para remover o nome do arquivo. Ele conta o número de ocorrências desse arquivo nostrace
e apresenta um resumo paginado ao usuário. Não é perfeito, mas o número de chamadas do sistema para um arquivo específico pode ter alguma correlação fraca com a quantidade de E / S que está executando.Não testei completamente, mas se não funcionar imediatamente, deve dar às pessoas um lugar para começar. Se ficar mais detalhado, pode ser aconselhável reescrever isso em uma linguagem de nível superior, como python .
Se eu não receber uma resposta dentro de uma semana de uma maneira menos caseira de fazer isso (mesmo que seja outra ferramenta que apenas conte a E / S de um processo específico), aceitarei isso como minha resposta para a posteridade.
Roteiro:
fonte
Você pode usar o iwatch Usando o iWatch
O iWatch é muito simples de usar, suponha que você queira observar a alteração no sistema de arquivos / etc, basta executá-lo no console
e o iwatch informará se algo mudar neste diretório. E se você deseja ser notificado por email:
Nesse caso, o administrador receberá uma notificação por e-mail (talvez você possa usar sua conta de gateway sms, para que você se assuste imediatamente a qualquer momento e em qualquer lugar). E se você deseja monitorar muitos diretórios diferentes, pode usar um arquivo de configuração. Este arquivo de configuração é um arquivo xml com uma estrutura fácil de entender.
fonte
inotify
está correto? Eu hesitava em usar qualquer coisa com base,inotify
já que você precisa fornecer caminhos (o que é basicamente o que estou procurando) e fiquei preocupado com a quantidade de sobrecarga que haveria se eu fizesse tudo por baixo./
Pode filtrar por PID? Talvez eu consiga tolerar lentidão temporária se for fácil extrair qual programa está sendo executado. O site também não possui nenhum exemplo de saída de comando.