Что такое RSS и VSZ в управлении памятью Linux - PullRequest
274 голосов
/ 24 октября 2011

Что такое RSS и VSZ в управлении памятью Linux?В многопоточной среде, как можно управлять и отслеживать обе эти функции?

Ответы [ 4 ]

413 голосов
/ 10 января 2014

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

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

Таким образом, если процесс A имеет двоичный файл размером 500 КБ и связан с 2500 КБ совместно используемых библиотек, имеет 200 КБ выделенных стеков / кучи, из которых 100 КБ фактически находится в памяти (остальная часть поменялась местами или не используется), и он фактически загрузил только 1000 КБ общие библиотеки и 400 КБ своего двоичного файла:

RSS: 400K + 1000K + 100K = 1500K
VSZ: 500K + 2500K + 200K = 3200K

Поскольку часть памяти является общей, многие процессы могут использовать ее, поэтому, если вы сложите все значения RSS, вы легко сможете получить больше места, чем в вашей системе.

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

Существует также PSS (пропорциональный размер набора). Это более новая мера, которая отслеживает общую память как пропорцию, используемую текущим процессом. Так что, если раньше было два процесса, использующих одну и ту же общую библиотеку:

PSS: 400K + (1000K/2) + 100K = 400K + 500K + 100K = 1000K

Все потоки имеют одинаковое адресное пространство, поэтому RSS, VSZ и PSS для каждого потока идентичны всем другим потокам в процессе. Используйте ps или top для просмотра этой информации в linux / unix.

Существует нечто большее, чем это, чтобы узнать больше, проверьте следующие ссылки:

Также см .:

45 голосов
/ 25 октября 2011

RSS - это размер резидентного набора (физически резидентная память - это в настоящее время занимает место в физической памяти машины), а VSZ - это размер виртуальной памяти (выделенное адресное пространство - у него есть адреса, выделенные в карте памяти процесса, но нет ' t обязательно какая-то реальная память за этим все прямо сейчас).

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

7 голосов
/ 02 августа 2015

Я думаю, что уже много сказано о RSS против VSZ. С точки зрения администратора / программиста / пользователя, когда я проектирую / кодирую приложения, меня больше беспокоит RSZ (резидентная память), поскольку, когда вы продолжаете тянуть все больше и больше переменных (в кучу), вы увидите, что это значение возрастает. Попробуйте простую программу для построения распределения памяти на основе malloc в цикле и убедитесь, что вы заполняете данные в этом пространстве malloc. RSS продолжает расти. Что касается VSZ, то это в большей степени отображение виртуальной памяти, чем в Linux, и одна из его основных функций, вытекающих из традиционных концепций операционной системы. Управление VSZ осуществляется с помощью управления виртуальной памятью ядра, для получения дополнительной информации о VSZ см. Описание Роберта Лава в mm_struct и vm_struct, которые являются частью базовой структуры данных task_struct в ядре.

1 голос
/ 24 октября 2011

Они не управляются, но измеряются и, возможно, ограничены (см. getrlimit системный вызов, также на getrlimit (2) ).

RSS означает размер резидентного набора (часть вашего виртуального адресного пространства в ОЗУ).

Вы можете запросить виртуальное адресное пространство процесса 1234, используя proc (5) с cat /proc/1234/maps и его статус (включая потребление памяти) через cat /proc/1234/status

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