¿Cómo puedo monitorear el consumo de memoria por proceso / por subproceso (dividido en montón, pila, datos, código)?

11

Antes de saltar y escribir mi propio código, quiero saber si hay un software GNU / Linux que sea capaz de generar algo similar a los QNXshowmem .

Para cada subproceso de cada proceso que se ejecuta, me gustaría ver el consumo de memoria dividido en las siguientes categorías:

 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)

¿Hay algo que lo haga posible?

Alex Dima
fuente
Parece que la mayor parte de esta información está en/proc/$PID/smaps
Bratchley
Así es, pero esperaba que haya alguna herramienta que pueda ejecutar y envíe automáticamente la información de la memoria.
Alex Dima
Estoy seguro de que existen perfiles de memoria para alguien con necesidades específicas. La mayoría de la gente podría guardar periódicamente el contenido de ese archivo de proceso. FWIW parece que uno de los componentes de valgrind tiene un muy buen perfilador. Nunca lo he usado, pero tal vez es una dirección para que entres.
Bratchley

Respuestas:

6

Puede ver cierta información usando pmap -x PID: está dividida en kbytes, rss y memoria sucia para cada biblioteca / módulo / archivo abierto / pila de un proceso:

undefine @ uml: ~ $ pmap -x 13206
13206: dormir 60
Dirección Kbytes RSS Asignación de modo sucio
0000000000400000 24 20 0 rx-- dormir
0000000000606000 4 4 4 r ---- dormir
0000000000607000 4 4 4 rw --- dormir
000000000063b000 132 8 8 rw --- [anon]
00007f6a9847e000 4308 44 0 r ---- locale-archive
00007f6a988b3000 1772376 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 140116 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 --- [pila]
00007fff09ffe000 8 4 0 rx-- [anon]
ffffffffff600000 4 0 0 rx-- [anon]
---------------- ------- ------- ------- 
kB total 8652 656 96
indefinido
fuente