Вопрос или проблема
Я видел похожие вопросы 1, 2, и понимаю разницу между RSS/VSZ.
У меня есть несколько случаев использования mmap для отображения различных областей виртуальной памяти в ту же самую физическую память. В этом случае /proc/pid/stat
и /proc/pid/maps
показывают RSS = VSZ = сумма всех отображений.
Сумма PSS корректна в этом случае, но я не думаю, что суммирование всех PSS каждый раз — это хороший способ отчета об “актуальной” памяти. Более того, это также будет включать память из libc и других библиотек.
Эта “актуальная память” отображается в Linux? Под актуальной памятью я имею в виду: физические страницы, используемые/выделенные процессом.
Ответ или решение
Определение действительного использования памяти процессом в Linux может представлять собой сложную задачу, особенно если учесть разницу между различными показателями памяти, такими как RSS (Resident Set Size) и VSZ (Virtual Size), а также особенности работы таких механизмов, как mmap. Для точного анализа использования памяти процессом необходимо понять, как операционная система управляет памятью и какие инструменты предоставить для мониторинга этого использования.
Теория (Theory)
-
Понятие использования памяти: В Linux понятие использования памяти процессом может включать несколько различных показателей:
- RSS (Resident Set Size): это количество физической памяти, фактически используемой процессом, исключая страничные свопы. Оно включает только те страницы, которые активно находятся в оперативной памяти.
- VSZ (Virtual Size): размер виртуальной памяти, выделенной процессу. VSZ включает в себя все области памяти, используемые процессом, включая те, которые могут быть выведены в файл подкачки (swap), или разделяемые с другими процессами.
- PSS (Proportional Set Size): это улучшенный показатель, который делит потребление физической памяти на несколько процессов, основанных на том, сколько процессов разделяют свои страницы.
-
Механизмы управления памятью в Linux:
- mmap: с помощью этой системы процесс может выделить страницы памяти, которые могут отображать файлы или устройства, и обеспечить поддержку общих областей памяти. Это может приводить к ситуации, где несколько регионов виртуальной памяти (VSZ) ссылаются на одни и те же физические страницы.
Пример (Example)
Представим процесс, который использует библиотеку через mmap
, что приводит к выделению нескольких виртуальных регионов в памяти, ссылающихся на одни и те же физические страницы. В таких случаях традиционные методы, как простое суммирование RSS, могут не отражать истинного использования памяти процессом, так как RSS будет учитывать физическую память всех отображенных страниц, даже тех, что делятся между процессами или внутренними потоками.
Применение (Application)
Рассмотрим конкретные шаги для более точного определения использования памяти:
-
Использование
/proc/[pid]/smaps
:- В файле
/proc/[pid]/smaps
содержится информация, в которой каждая строка описывает часть адресного пространства процесса. Это может включать как уникальные, так и общие его части. - Для каждого региона памяти
smaps
предоставляет набор свойств, среди которых PSS является тем, который пропорционально делит память между процессами.
- В файле
-
Оптимальная Метрика:
- Если вашей целью является определение только физически используемой памяти конкретным процессом без учета совместно используемых регионов, деление памяти на страницы и анализ PSS предоставляют более точное представление.
- Используя PSS, вы можете узнать долю физической памяти, действительно расходуемую под данный процессом, которая дополнительно учитывает возможные мульти-ссылки на те же страницы из других процессов.
-
Учет библиотек и общих ресурсов:
- Важно понимать, что попытка "очистить" память от влияния общих библиотек (например,
libc
) может не представлять собой верное отображение нагрузки процесса на память. Эти библиотеки используются многими процессами и их изоляция может искусственно уменьшить "реальное" влияние на память.
- Важно понимать, что попытка "очистить" память от влияния общих библиотек (например,
-
Утилиты и инструменты:
- Используйте такие инструменты, как
smem
, которые помогают анализировать использование памяти с акцентом на PSS. Они могут также предоставлять сводную информацию о RSS, PSS, и других метриках, помогая определить долю общего использования.
- Используйте такие инструменты, как
Таким образом, для оценки "действительного" использования памяти процессом в Linux, следует акцент делать на разумное использование PSS
, как дополнительного метода для анализа, так как оно обеспечивает более обоснованное распределение как единоличных, так и общих ресурсов памяти между соответствующими процессами. Метрика PSS, таким образом, позволяет оценить нагрузку на физическую память более адекватно, предотвращая возможные ошибки интерпретации, типичные для простых сумм RSS или VSZ.