Как Linux вычисляет MemFree

Я пытаюсь понять использование встроенной памяти linux.

используя верхнюю утилиту и файл процесса / proc / meminfo, я могу видеть, сколько виртуальной памяти использует процесс и сколько физической памяти доступно системе. Но, казалось бы, для любого данного процесса виртуальная память может быть намного выше используемой физической памяти. Поскольку это встроенная системная память, замена отключена.(SwapTotal = 0)

Как linux вычисляет свободная физическая память? Поскольку он, похоже, не учитывает все, что выделяется в виртуальном пространстве памяти.

2 ответов


MemFree на /proc/meminfo - это количество свободных страниц в распределителе приятелей. Этот распределитель приятелей является основной единицей распределения физической памяти в ядре; однако есть много способов, которыми страницы могут быть возвращены распределителю приятелей во время необходимости - например, освобождение пустых слябов, отбрасывание кэш-памяти/буфера (даже если это означает недействительность PTEs в запущенном процессе) или, в крайнем случае, замена вещей.

в самом деле MemFree обычно контролируется только 5-10% от общей физической ОЗУ, при этом любая дополнительная свободная ОЗУ кооптируется в кэш с течением времени. Как таковой,MemFree только очень неполный взгляд на общую ситуацию с памятью.

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


попробуйте использовать htop. Вам придется установить его sudo apt-get install htop или yum install htop, независимо от.

Он покажет вам более точное представление использования памяти.

в основном, это сводится к "буферам / Кешу".

free -m

посмотрите на свободный столбец в строке буферов/кэша, это более точное представление того, что на самом деле доступно.

             total       used       free     shared    buffers     cached
Mem:          3770       3586        183          0        112       1498
-/+ buffers/cache:       1976       1793
Swap:         7624        750       6874