Wie kann ich den Speicherverbrauch pro Prozess / pro Thread überwachen (unterteilt in Heap, Stack, Daten, Code)?

11

Bevor ich hineinspringe und meinen eigenen Code schreibe, möchte ich herausfinden, ob es eine GNU / Linux-Software gibt, die etwas Ähnliches wie QNXshowmem ausgeben kann .

Für jeden Thread jedes laufenden Prozesses möchte ich, dass der Speicherverbrauch in die folgenden Kategorien unterteilt wird:

 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)

Gibt es etwas, das dies ermöglicht?

Alex Dima
quelle
Es sieht so aus, als ob die meisten dieser Informationen in/proc/$PID/smaps
Bratchley
Das stimmt, aber ich hatte gehofft, dass es ein Tool gibt, das ich ausführen und die Speicherinformationen automatisch ausgeben kann.
Alex Dima
Ich bin sicher, es gibt Speicherprofiler für jemanden mit spezifischen Anforderungen. Die meisten Leute könnten den Inhalt dieser Proc-Datei nur regelmäßig speichern. FWIW es klingt so, als ob eine der Komponenten von valgrind einen ziemlich guten Profiler hat. Ich habe es nie benutzt, aber vielleicht ist es eine Richtung, in die du gehen musst.
Bratchley

Antworten:

6

Sie können einige Informationen mit sehen pmap -x PID anzeigen - sie sind für jede Bibliothek / jedes Modul / jede geöffnete Datei / jeden Stapel eines Prozesses in KByte, RSS und Dirty Memory unterteilt:

undefine @ uml: ~ $ pmap -x 13206
13206: Schlaf 60
Adresse Kbytes RSS Dirty Mode Mapping
0000000000400000 24 20 0 rx-- sleep
0000000000606000 4 4 4 r ---- Schlaf
0000000000607000 4 4 4 rw --- sleep
000000000063b000 132 8 8 rw --- [anon]
00007f6a9847e000 4308 44 0 r ---- Gebietsschema-Archiv
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 --- [Stapel]
00007fff09ffe000 8 4 0 rx-- [anon]
ffffffffff600000 4 0 0 rx-- [anon]
---------------- ------- ------- ------- 
gesamt kB 8652 656 96
undefinieren
quelle