Какой вид памяти отображает реальное количество памяти занимаемой процессом в Linux

В Linux имеется несколько общеизвестных видов системной памяти, самые популярные из них — VIRT, RES и SHR. В др. ОС всё примерно аналогично, но зачастую не так прозрачно и называется по-своему. Для каждого процесса в Linux имеются значения всех этих видов памяти и значения эти у них очень разные. Какой же вид памяти отображает сколько памяти действительно занимает процесс в Linux? Разберём что такое VIRT, RES и SHR память, чтобы иметь понимание.

Если вызвать какой-нибудь монитор процессов, напр., ps, top или htop, то можно узреть, что они для каждого процесса отображают все виды памяти. Самое большое число будет в графе VIRT. Приложение с легкостью может показывать VIRT в разы больше, чем у ПК есть физической памяти вообще, например, из-за глупых настроек БД. VIRT это не фактически занимаемая память. В контексте, VIRT означает сколько памяти процесс объявил как «хочет» (не путать с «надо») и операционная система выделила ему этой памяти из разных источников хранения. Процесс не имеет доступа к физической памяти напрямую, поэтому операционная система ему выделяет память как виртуальную, некий абстрактный объём, которым может пользоваться процесс исходя из его запросов желаний («хотелось-бы столько-то»). А дальше менеджер памяти сам заботится о том, в какую конкретно память распределять данные, используемые процессом, в RAM, в SWAP и т.д. Этот показатель очень посредственным образом связан с тем, сколько действительно занял процесс.

Что же говорить о реальной памяти, отъедаемой процессом, тут надо смотреть на RES и с оглядкой на:

  1. Текущую загрузку системы по части используемой памяти (влияет, на количество страниц сброшенных на диск).
  2. Совместно используемая память. Два совершенно разных процесса, используя одни и те же библиотеки, уже загруженные в память, отобразят размер такой памяти в этом показатели — каждый из них отобразит, несмотря на то, что фактически память разделена между двумя независимыми процессами, да кого там два — обычно это десятки и сотни процессов и в таком случае RES будет больше реального объема памяти, который сожрал процесс, потому что в не зависимости от существования процесса, количество используемой памяти вообще не изменится, т.к. она используется кем-то еще.

Если хотите узнать сколько реально памяти занимает процесс программы, то нужно ориентироваться на RES. Если сравнивать популярные текстовые редакторы, то в этом плане разница между Vim и Sublime Text мизерная. У Atom существенно больше, но почему так достаточно легко сказать, потому что Atom это мешанина из всевозможных библиотек JS, C++, CSS и HTML, в отличие от Sublime с базой на C++ и C-шного Vim’а. Pycharm это Java и Python, комбайн с кучей (99%) ненужного пользователям хлама, встроенным веб сервером и прочими составляющими.