Как надежно измерить доступную память в Linux? - PullRequest
19 голосов
/ 11 июня 2010

Linux /proc/meminfo показывает статистику использования памяти.

MemTotal:      4040732 kB
MemFree:         23160 kB
Buffers:        163340 kB
Cached:        3707080 kB
SwapCached:          0 kB
Active:        1129324 kB
Inactive:      2762912 kB

Между ними довольно много совпадений. Например, насколько я понимаю, может быть активный кеш страниц (относится к «кэшированным» и «активным») и неактивный кеш страниц («неактивный» + «кешированный»).

Что я хочу сделать, это измерить «свободную» память, но таким образом, чтобы она включала использованные страницы, которые, вероятно, будут отброшены без существенного влияния на общую производительность системы.

Сначала я был склонен использовать «free» + «inactive», но «свободная» утилита Linux использует «free» + «cached» в своем «скорректированном по буферу» дисплее, поэтому мне интересно, какой подход лучше есть.

Когда ядру не хватает памяти, какой приоритет страниц отбрасывается и какой показатель больше подходит для измерения доступной памяти?

Ответы [ 5 ]

8 голосов
/ 13 июня 2010

Поскольку то, что именно означает «доступная память», зависит от вашей цели, и ваша цель - избежать ситуаций с OOM:

Проверьте как Qt Extended (ранее Qtopia) предвидел ситуации с OOM.

Есть два события:

  • (MemFree + Buffers + Cached) / MemTotal <порог (в <code>/proc/meminfo)
  • Основные ошибки страницы> Порог (pgmajfault в /proc/vmstat Я думаю)

Первое - это раннее предупреждение о том, что памяти мало, и запускает более частый мониторинг сбоев страниц. Второй сигнал перебивает, что снижает производительность системы и является хорошим намеком на то, что OOM Killer будет работать.

3 голосов
/ 13 июня 2010

Сначала я нашел ваш вопрос простым, поскольку на практике вывод из free в столбцах '+ buffers / cache' - это тот, который я использую, и он обычно работает.

Но одна из ситуаций, в которой он не работает, это когда вы интенсивно читаете одни и те же блоки. Например. читая один и тот же файл 1 gb_file снова и снова:

while true; do cat 1gb_file >/dev/null; done

Если ваша система имеет> 1 ГБ кеша, это будет работать быстро. Но если вы начнете использовать часть этого кэша для чего-то другого, это снизит производительность системы.

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

2 голосов
/ 11 октября 2016

В linux-3.14 есть новая метрика MemAvailable в /proc/meminfo.

И проверьте строку '- / + buffers / cache:' в выводе утилиты free.

2 голосов
/ 18 июня 2013

Я использую следующее:

FREE_KB = MemFree + Buffers + Cached

FREE_KB=$(($(echo `sed -n '2p;3p;4p' <  /proc/meminfo | sed "s/ \+/ /g" | cut -d' ' -f 2 ` | sed "s/ /+/g")))


USED_KB = MemTotal - MemFree - Buffers - Cached

USED_KB=$(($(echo `head -n4 /proc/meminfo | sed "s/ \+/ /g" | cut -d' ' -f 2 ` | sed "s/ /-/g")))
2 голосов
/ 11 июня 2010

Я бы сказал, что трудно измерить, какие страницы, если их уронить, приведут к тому, что система окажет «значительное влияние на общую производительность системы». Страницы, используемые пользовательскими процессами, будут (Total) - (Free + Cached + Paged). Второе слагаемое - это вся память, которую ядро ​​может освободить при необходимости. Однако освобождение страниц памяти, используемых для кэширования и страниц, окажет значительное влияние на общую производительность системы.

Если бы я собирался использовать эвристику, я бы сказал, что вы должны принять значение «Неактивно», которое равно «Общий объем буферной или страничной кеш-памяти в килобайтах, которые являются свободными и доступными. память, которая не использовалась в последнее время и может быть использована для других целей ". Если вы обнаружите, что принимаете это, и система продолжает работать нормально, вы можете оценить некоторый процент «Активного», чтобы принять его как предположение, потому что система могла использовать некоторые страницы в последнее время, но не собирается использовать их снова. Вы знаете больше о системе, чем я. Если система посвящена тому, что вы собираетесь делать, то страницы и кэшированные файлы в Active, которые могут скоро использоваться, будут зависеть от того, была ли система недавно использована для чего-то другого.

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