Monitorando as atividades do processo usando somente chamadas do sistema (sem utilitários como 'top')

3

Eu quero obter informações sobre a memória usada por diferentes usuários e diferentes processos que os usuários estão executando e estatísticas sobre esses processos, como consumo de memória, velocidade de execução, etc., usando chamadas do sistema Linux.

Eu não quero usar comandos como free , top etc. Alguém pode sugerir como fazer isso?

    
por nishan 19.04.2011 / 05:18

2 respostas

3

É importante entender como a memória é usada. Uma parte significativa da memória é frequentemente compartilhada. Qualquer código usado em um programa e suas bibliotecas são compartilhadas entre diferentes processos. O código é mapeado na memória como somente leitura e é compartilhado por todos os processos, portanto, não pertence a nenhum usuário. Certas bibliotecas como libc são usadas por praticamente todos os processos, mas são carregadas somente na RAM uma vez. Programas com mais código terão mais memória compartilhada do que programas com mais dados.

Para responder à sua pergunta, quase todas as informações que programas como top, free e ps get vêm da verificação do /proc filesystem. Todo processo tem sua própria pasta com o nome do PID. Há vários arquivos, como mapas, que mostram seu mapa de memória, comm que mostra o comando que foi executado para iniciar o processo e io que mostra o uso de E / S. Há uma introdução a /proc na Documentação do Kernel Linux .

    
por 19.04.2011 / 08:15
0

Acho que você precisa usar o seguinte método. Estou mostrando um exemplo:

  • Considere que eu preciso saber informações sobre o navegador firefox que está sendo executado na minha Linux Box. Vou seguir os passos abaixo:

    1. Obtenha o PID do firefox:

    [shubham@system-dev ~]$ ps -aux | grep firefox Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ shubham 24790 17.5 25.8 1679220 1038440 ? Sl 09:15 26:02 /usr/lib/firefox/firefox

    1. Agora use / proc FS com "PID" para ver várias informações (um exemplo para o firefox na minha caixa de Linux é fornecido abaixo) [shubham@system-dev ~]$ cat /proc/24790/status Name: firefox State: S (sleeping) Tgid: 24790 Pid: 24790 PPid: 29843 TracerPid: 0 Uid: 501 501 501 501 Gid: 0 0 0 0 Utrace: 0 FDSize: 256 Groups: 0 VmPeak: 1682804 kB VmSize: 1679412 kB VmLck: 0 kB VmPin: 0 kB VmHWM: 1183048 kB VmRSS: 1040800 kB VmData: 1453848 kB VmStk: 152 kB VmExe: 64 kB VmLib: 61296 kB VmPTE: 2828 kB VmSwap: 147048 kB Threads: 24 SigQ: 1/31287 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 0000000001001000 SigCgt: 00000001800044ef CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000 CapBnd: ffffffffffffffff Cpus_allowed: f Cpus_allowed_list: 0-3 Mems_allowed: 1 Mems_allowed_list: 0 voluntary_ctxt_switches: 2604819 nonvoluntary_ctxt_switches: 560691

    2. Você pode usar muitos arquivos no diretório / proc // para fins de monitoramento (ex: mem, io, stat.stack etc)

NOTA: Para usar somente com o syscalls, você precisará de configurações como: open (), creat (), close (), read () etc.

Espero que você entenda a resposta!

    
por 07.04.2015 / 08:29