Устройство Linux / Объяснение

/proc/PID/maps: как читать области виртуальной памяти

Разберите адреса, права и файловые отображения в maps. Научитесь отличать размер области от резидентной памяти и выбирать следующий шаг измерения.

Средний8 минОбщие принципы LinuxLinux · понятия и интерфейсыBash · pipeline semantics

Большой диапазон ещё не означает занятую RAM

У программы внезапно обнаружился большой виртуальный размер. Прежде чем искать утечку, посмотрите, из каких отображений сложилось её адресное пространство. maps помогает связать диапазон с назначением, но не заменяет учёт физической памяти.

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

Адрес, права, смещение и источник

В строке maps есть диапазон адресов, права доступа, смещение, устройство, inode и возможное имя. Буквы r, w, x обозначают разрешения, а p или s — частное либо совместное отображение. Пустое имя допустимо для анонимной области.

Один файл может участвовать в нескольких отображениях с разными правами и смещениями. Длина диапазона показывает размер виртуальной области; из неё нельзя получить число реально резидентных страниц. Для подробностей о памяти выбранного процесса используют дополнительные данные smaps.

Откройте начало карты своей Bash

Фрагмент читает первые двенадцать строк. Это обзор формата, а не полный анализ приложения; адреса и пути в вашей системе будут отличаться.

Локальная Linux-система
mapping_pid=$$
printf "Начало карты PID %s\n" "$mapping_pid"
head -n 12 "/proc/$mapping_pid/maps"

Разберите одну строку полностью

Выберите запись с именем исполняемого файла. Отметьте диапазон, права и смещение, затем найдите другую запись с тем же именем. Различие прав объясняет, почему поиск одного пути не равен подсчёту одной непрерывной области.

Для учебного диапазона 20000000–20004000 шестнадцатеричная разность равна 0x4000, то есть 16384 байтам виртуального пространства. Это самостоятельно заданные числа для арифметики, а не ожидаемый вывод вашей машины. Не переводите полученные 16 KiB в утверждение об обязательных 16 KiB расхода RAM.

Проверьте своё рассуждение

Задача: имя библиотеки встречается четырежды. Нужно ли считать это четырьмя независимыми загруженными копиями библиотеки?

Нет. Сначала сопоставьте смещения и права: строки могут описывать разные части одного файла. Для оценки фактической памяти нужны резидентные показатели и понимание совместного использования страниц.

Карта меняется во время работы

Новые отображения могут появляться между чтениями. Расположение адресов не обязано повторяться после запуска, а доступ к чужой карте ограничивается правами. Не публикуйте полный maps без необходимости: он содержит пути и сведения о расположении памяти, которые не требуются для большинства учебных вопросов.

Технические источники

Использованы для проверки поведения. Объяснения и учебные сценарии созданы для проекта.

  • Linux man-pages — proc_pid_maps(5)
  • Linux man-pages — proc_pid_smaps(5)

Проверка текста: 2026-09-11. Нативное исполнение на всей матрице дистрибутивов ещё не подтверждено.

Нужны собственная Linux-система, смонтированный procfs и Bash. Доступность полей зависит от ядра, его конфигурации, прав и пространств имён. Примеры только читают диагностические интерфейсы; браузерный симулятор их не реализует.

От материала к практике

Выберите следующую тему в каталоге Linux или проверьте знакомые команды в учебном терминале.

Поиск по Linux

Поиск локальный. ↑ ↓ — перейти к результату, Enter — открыть.

Навигация