Jak mogę monitorować zużycie pamięci na proces / wątek (podzielone na stos, stos, dane, kod)?

11

Przed wskoczeniem i napisaniem własnego kodu chcę dowiedzieć się, czy istnieje oprogramowanie GNU / Linux, które jest w stanie wygenerować coś podobnego do QNXshowmem .

Dla każdego wątku każdego uruchomionego procesu chciałbym zobaczyć zużycie pamięci podzielone na następujące kategorie:

 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)

Czy jest coś, co umożliwi to?

Alex Dima
źródło
Wygląda na to, że większość tych informacji znajduje się w/proc/$PID/smaps
Bratchley,
Zgadza się, ale miałem nadzieję, że jest jakieś narzędzie, które mogę uruchomić i automatycznie wysyła informacje o pamięci.
Alex Dima,
Jestem pewien, że są dostępne profile pamięci dla osób o określonych potrzebach. Większość osób może okresowo zapisywać zawartość tego pliku proc. FWIW wygląda na to, że jeden ze składników valgrind ma całkiem niezły profiler. Nigdy go nie użyłem, ale może to kierunek, w który należy pójść.
Bratchley,

Odpowiedzi:

6

Możesz zobaczyć niektóre informacje za pomocą pmap -x PID- jest podzielony na kilobajty, rss i brudną pamięć dla każdej biblioteki / modułu / otwartego pliku / stosu procesu:

undefine @ uml: ~ $ pmap -x 13206
13206: spać 60
Adres Kbytes RSS Dirty Mode Mapping
0000000000400000 24 20 0 rx - sen
0000000000606000 4 4 4 r ---- sen
0000000000607000 4 4 4 rw --- spać
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 --- [stos]
00007fff09ffe000 8 4 0 rx-- [anon]
ffffffffff600000 4 0 0 rx-- [anon]
---------------- ------- ------- ------- 
ogółem 8652 656 96 KB
niezdefiniować
źródło