Como rastrear o número de processos e garfos por usuário?

5

Eu preciso descobrir quantos garfos são feitos e quantos processos simultâneos são executados por cada usuário ao longo do tempo. Não parece que esta informação seja rastreada pela minha distribuição.

Eu sei como definir limites, mas estou interessado em rastrear esses números para cada usuário.

    
por Julien 13.02.2013 / 06:34

3 respostas

6

Experimente o pacote psacct (contabilidade GNU), ele deve fazer praticamente tudo que você precisa, depois de instalado e ativado ( accton ), então lastcomm manterá relatório sobre os processos do usuário (veja também sa e %código%). Veja isto para referência: arquivo de log de comandos executado pelo usuário

Pode ser necessário atualizar a versão para registrar o PID / PPID, consulte , caso contrário, suspeito que ele não será informado sobre dump-acct sem fork() .

Atualizar Se o exec() outputs lastcomm na segunda coluna, significa que o processo foi um fork (que nunca chamou F para substituir-se por um novo processo). A saída de exec() deve mostrar o PID (e o PPID) no formato acct v3.

Uma alternativa ao psacct pode ser o novo (ish) dump-acct , mas ainda não há uma grande quantidade de suporte para ele, veja taskstats em sua fonte de versão do kernel. Isso pode ajudar você a iniciar o link link O exemplo de código específico é Documentation/accounting/taskstats.txt , você precisará modificar a linha tasklogger.c na função printf() , em primeiro lugar para substituir print_delayacct2() por %u para os %llu types e em segundo lugar para adicionar o campo __u64 (e talvez ac_uid ) que você precisa rastrear pelo usuário. Invoque-o com algo como ac_gid (onde tasklogger -dl -m 0-1 indica CPUs 0-1). Você verá os detalhes em tempo real à medida que cada processo termina.

Existe também um módulo perl -m 0-1 disponível no CPAN, embora eu não tenha usado.

Você precisará processar os dados com base nos timestamps se quiser a contagem de processos simultâneos por usuário, isso não é tão simples quanto parece.

Atualização 2 Ok, as coisas para verificar o suporte Linux::Taskstats::Read necessário são:

  1. kernel (oficial) > = 2.6.8 para suporte à contabilidade v3 (ou backport)
  2. kernel com psacct e CONFIG_BSD_PROCESS_ACCT ativado
  3. pacote de contabilidade com capacidade
  4. v3 ( CONFIG_BSD_PROCESS_ACCT_V3 ), conforme observado acima

Todos os acima devem ser verdadeiros no CentOS 6, eu verifiquei um 5.xe não tem psacct , então você teria que reconstrua seu kernel para ativá-lo.

O CONFIG_BSD_PROCESS_ACCT_V3=y original tem cerca de 15 anos, a versão Red Hat / CentOS retrocedeu o suporte a exibição de v3 e PID (não posso testá-lo agora, mas deve funcionar).

Para verificar a configuração do seu kernel:

zgrep BSD_PROCESS_ACCT /proc/config.gz /boot/config-'uname -r'
    
por 13.02.2013 / 12:03
0

Você pode usar ps -ef para ver o pid filho, o pai é o que fez a bifurcação ou a desova. Você pode usar watch para executar um script regularmente e fazer a contagem para você.

    
por 13.02.2013 / 06:43
0

Você pode configurar o subsistema de auditoria para registrar garfos (e qualquer outra chamada de sistema que você goste).

auditctl -a exit,always -S clone
    
por 14.02.2013 / 02:21