Como posso monitorar o consumo de memória por processo / por thread (dividido em heap, pilha, dados, código)?

11

Antes de entrar e escrever meu próprio código, quero descobrir se existe algum software GNU / Linux capaz de gerar algo semelhante ao QNXshowmem .

Para cada thread de cada processo em execução, gostaria de ver o consumo de memória dividido nas seguintes categorias:

 Process listing (Total, Code, Data, Heap, Stack, Other)
 319488  1024000      24587     167936      24576          0        4103 devc-con-hid (thread 2)
    0          0          0          0       4096          0        4103 devc-con-hid (thread 2)
    0          0          0          0      20480          0        4103 devc-con-hid (thread 1)
    0     102400       8192          0          0          0        4103 devc-con-hid (proc/boot/devc-con-hid)
    0          0      16384          0          0          0        4103 devc-con-hid (proc/boot/libc.so.3)
    0          0          0          0          0  (   36864)       4103 devc-con-hid (/dev/mem)

Existe algo que tornará isso possível?

Alex Dima
fonte
Parece que a maioria dessas informações está dentro de/proc/$PID/smaps
Bratchley
É isso mesmo, mas eu esperava que houvesse alguma ferramenta que eu possa executar e produza automaticamente as informações da memória.
Alex Dima
Tenho certeza de que existem perfis de memória disponíveis para alguém com necessidades específicas. A maioria das pessoas poderia salvar periodicamente o conteúdo desse arquivo proc. FWIW, parece que um dos componentes do valgrind tem um bom perfilador. Eu nunca usei, mas talvez seja uma direção para você entrar.
Bratchley

Respostas:

6

Você pode ver algumas informações usando pmap -x PID- ele é dividido em kbytes, rss e memória suja para cada biblioteca / módulo / arquivo aberto / pilha de um processo:

undefine @ uml: ~ $ pmap -x 13206
13206: sono 60
Mapeamento de modo sujo do endereço Kbytes RSS
0000000000400000 24 20 0 rx-- sono
0000000000606000 4 4 4 r ---- sono
0000000000607000 4 4 4 rw --- sono
000000000063b000 132 8 8 rw --- [anon]
00007f6a9847e000 4308 44 0 r ---- locale-archive
00007f6a988b3000 1772 376 0 rx-- libc-2.19.so
00007f6a98a6e000 2048 0 0 ----- libc-2.19.so
00007f6a98c6e000 16 16 16 r ---- libc-2.19.so
00007f6a98c72000 8 8 8 rw --- libc-2.19.so
00007f6a98c74000 20 12 12 rw --- [anon]
00007f6a98c79000 140 116 0 rx-- ld-2.19.so
00007f6a98e71000 12 12 12 rw --- [anon]
00007f6a98e99000 8 8 8 rw --- [anon]
00007f6a98e9b000 4 4 4 r ---- ld-2.19.so
00007f6a98e9c000 4 4 4 rw --- ld-2.19.so
00007f6a98e9d000 4 4 4 rw --- [anon]
00007fff09fd0000 132 12 12 rw --- [pilha]
00007fff09ffe000 8 4 0 rx-- [anon]
ffffffffff600000 4 0 0 rx-- [anon]
---------------- ------- ------- ------- 
kB total 8652 656 96
indefinir
fonte