Como posso identificar o total de arquivos abertos pelo ID do usuário?

2

Ontem, um dos usuários do nosso sistema tinha um script mal formado que consumia todo o espaço em um de nossos sistemas de arquivos. Por meio de muitas tentativas e erros, consegui identificar o usuário e eliminar os processos que causavam o problema.

Existe uma maneira simples de identificar tais processos no futuro?

Acho que a saída do comando lsof /file-system exibirá cada arquivo aberto com USER, PID e tamanho de arquivo e suponho que eu poderia escrever um programa para analisar a saída, mas estou curioso para saber se há outro comando para faça isso. Eu realmente quero um relatório do tamanho total do arquivo por usuário, apenas para ajudar a focar se esse problema acontecer novamente.

Estou no Solaris 10, se isso for relevante. E eu não sou o administrador do sistema; Eu sou provavelmente um "usuário avançado" e coordeno as coisas para os usuários finais do nosso departamento.

    
por BellevueBob 20.02.2013 / 23:44

1 resposta

3

lsof só é capaz de reportar arquivos atualmente abertos por processos. Isso não ajudará se os dados já tiverem sido gravados no disco ou para rastreamento de E / S.

Se houver muito IO acontecendo no momento em que você estiver procurando, você pode ser capaz de capturar o processo ofensivo com iotop do DTraceToolkit

O tamanho no disco é um pouco mais difícil de gerar relatórios ad hoc devido ao tempo que uma varredura em um sistema de arquivos leva. Qualquer coisa fora do que o sistema de arquivos subjacente rastreia consome um pouco de tempo, especialmente se você precisar reportá-lo regularmente. Os relatórios não farão nada para impedir o problema, por isso, é melhor usar o arquivo sistema e cotas de usuário para restringir a quantidade de dados possível ser escrito onde. Depois de configurar a quota do usuário, você poderá relatar o uso de um usuário específico com mais facilidade com o relatório interno.

Como um relatório único (sem cotas), você poderia executar algo assim para obter uma estimativa do espaço usado em MB por usuário.

sudo find /path -type f -ls | perl -lane ' $total{ $F[4] } += $F[6]; 
END { map { printf "%-8s %d\n", $_, $total{$_}/2**20; } keys %total; }'

Isso será um pouco prejudicado devido ao espaço ser realmente alocado em blocos e links físicos irão falsamente inflar valores, mas bom o suficiente para capturar valores discrepantes se você puder esperar que a descoberta seja concluída :). Desculpe, é um pouco perito.

    
por 21.02.2013 / 01:58

Tags