Как я могу контролировать потребление памяти на процесс / на поток (разделенный на кучу, стек, данные, код)?

11

Прежде чем приступить к написанию собственного кода, я хочу выяснить, существует ли программное обеспечение GNU / Linux, способное выводить что-то похожее на QNXshowmem .

Для каждого потока каждого запущенного процесса хотелось бы, чтобы потребление памяти было разделено на следующие категории:

 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)

Есть ли что-нибудь, что сделает это возможным?

Алекс Дима
источник
Похоже, большая часть этой информации находится в/proc/$PID/smaps
Братчли
Это верно, но я надеялся, что есть какой-то инструмент, который я могу запустить и автоматически выводит информацию о памяти.
Алекс Дима
Я уверен, что есть профилировщики памяти для людей с особыми потребностями. Большинство людей могут просто периодически сохранять содержимое этого файла процесса. Похоже, один из компонентов valgrind имеет довольно хороший профилировщик. Я никогда не использовал это, но, возможно, это направление для вас, чтобы пойти в.
Братчли

Ответы:

6

Вы можете увидеть некоторую информацию, используя ее pmap -x PID- она ​​разделена на килобайты, rss и грязную память для каждой библиотеки / модуля / открытого файла / стека процесса:

undefine @ uml: ~ $ pmap -x 13206
13206: сон 60
Адрес Кбайт RSS Грязный режим отображения
0000000000400000 24 20 0 rx-- сон
0000000000606000 4 4 4 р ---- сон
0000000000700000 4 4 4 rw --- спать
000000000063b000 132 8 8 rw --- [anon]
00007f6a9847e000 4308 44 0 р ---- локаль-архив
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 --- [стек]
00007fff09ffe000 8 4 0 rx-- [anon]
ffffffffff600000 4 0 0 rx-- [anon]
---------------- ------- ------- ------- 
всего кБ 8652 656 96
Undefine
источник