Как 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