понимание вывода pmap - PullRequest
       41

понимание вывода pmap

20 голосов
/ 22 марта 2012

Я пытался увидеть карту памяти процесса в Linux x86-64 с помощью команды pmap -x. Я запутался, глядя на вывод pmap. Особенно для записей для отображения динамических библиотек. Для них есть несколько записей (фактически 4 для всех большинства из них, причем некоторые имеют 3 записи). Ниже приведен пример

  Address           Kbytes   RSS   Dirty Mode   Mapping

00000036ca200000      88      64       0 r-x--  libpthread-2.5.so
00000036ca216000    2044       0       0 -----  libpthread-2.5.so
00000036ca415000       4       4       4 r----  libpthread-2.5.so
00000036ca416000       4       4       4 rw---  libpthread-2.5.so

Вторая строка для каждой библиотеки всегда имеет размер 2 МБ, хотя у нее нет разрешения для страницы. Кажется, что во всех библиотеках его RSS ВСЕГДА ноль. Последние две строки также имеют одинаковый размер (базовый размер страницы) и одинаковые разрешения (несколько библиотек не имеют сопоставления rw).

У кого-нибудь есть объяснение этому? У меня есть ощущение, что, возможно, отображение с защитой только для чтения выполняется загрузчиком для чтения метаданных библиотеки, тогда как часть с исполняемым разрешением фактически является кодом для библиотеки. Хотя я могу ошибаться.

Но я понятия не имею об этом среднем ряду. Нет разрешения и нет использования? У кого-нибудь есть здесь слова мудрости?

Я также видел несколько страниц, о которых сообщалось, что они находятся в анонимной памяти и не имеют установленного бита режима. Что они представляют?

Ответы [ 2 ]

6 голосов
/ 23 октября 2015

Эти защищенные страницы "----" являются защитными страницами, чтобы предотвратить индексацию указателей между кодом и сегментами данных библиотеки.Они существуют только в виртуальном пространстве процесса и вызывают ошибку, если указатель проходит мимо конца сегмента.

Если бы они не были адресованы в файл общей библиотеки, я бы сказал, что они обслуживалив качестве буфера для расширения выделения, например, в malloc или рост стека.Например, glibc запрашивает у ядра большие куски адресного пространства для потоковых локальных распределительных арен, а затем медленно использует их для распределений malloc'd.В гораздо большем pmap от JVM, который я смотрю, есть несколько десятков из них, каждая из которых следует за страницей RW или заполняет пространство между двумя большими выделениями RW, и границы между ними смещаются по мере расширения страниц RW.На таких защитных страницах X86_64 можно использовать систему защиты памяти ЦП для обнаружения неправильных указателей на указатели.

4 голосов
/ 23 марта 2012

Прежде всего, может случиться так, что один и тот же процесс может использовать более одного экземпляра использования памяти. Я не знаю, если это то, что вы хотите знать. Я видел, что при использовании браузера в Linux, когда открыта только одна вкладка, и с помощью команды top, в списке использования памяти показывается более 4-х использований, охватывающих более 10 Мб памяти. Я думаю, что это нормально из-за большего количества потоков, выполняемых одним и тем же процессом.

Эта ссылка может быть полезна, поскольку в самом примере использования, если вы наблюдаете, отображение команды -x показывает большее количество использований.

http://www.cyberciti.biz/tips/howto-find-memory-used-by-program.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...