Linux /proc/meminfo
шоу много статистических данных использования памяти.
MemTotal: 4040732 kB
MemFree: 23160 kB
Buffers: 163340 kB
Cached: 3707080 kB
SwapCached: 0 kB
Active: 1129324 kB
Inactive: 2762912 kB
Существует довольно мало перекрытия между ними. Например, насколько я понимаю, может быть кэш активной страницы (принадлежит "кэшируемому" и "активному"), и неактивный кэш страницы ("неактивный" + "кэшируемый").
То, что я хочу сделать, должно измерить "свободную" память, но способом что она включает используемые страницы, которые, вероятно, будут отброшены без существенного влияния на производительность полной системы.
Сначала, я был склонен использовать "свободный" +, "свободная" утилита "неактивного", но Linux использует "свободный" + "кэшируемый" в ее "скорректированном буфером" дисплее, таким образом, мне любопытно, каков лучший подход.
Когда ядро исчерпывает память, что состоит в том, чтобы отбросить приоритет страниц и что более соответствующей является метрика для измерения доступной памяти?
Я бы сказал, что трудно измерить, какие страницы, если их сбросить, могут вызвать «значительное влияние на общую производительность системы». Страницы, используемые пользовательскими процессами, будут иметь вид (Всего) - (Свободные + Кэшированные + Страничные). Второй член - это вся память, которую ядро может освободить, если потребуется. Однако освобождение страниц памяти, используемых для кэша и страниц, может существенно повлиять на общую производительность системы.
Если бы я собирался использовать эвристику, я бы сказал, что вы должны взять значение «Неактивно», которое представляет собой «Общий объем свободной и доступной буферной или страничной кеш-памяти в килобайтах. Это память, которая недавно не использовалась и может быть использована для других целей ». Если вы обнаружите, что принимаете это, а система продолжает работать нормально, вы также можете оценить некоторый процент «Активных», который можно также принять в качестве предположения, потому что система могла использовать некоторые страницы в последнее время, но не собирается их использовать снова. Вы знаете о системе больше, чем я. Если система предназначена для того, что вы собираетесь делать, то количество страниц и кешированных файлов в Active, которые могут быть скоро использованы, будет зависеть от того, использовалась ли система недавно для чего-то другого.
Сначала я нашел ваш вопрос легким, поскольку на практике вывод из free
в столбцах «+ buffers / cache» - это тот, который я использую, и он обычно работает.
Но одна из ситуаций, в которой это не работает, - это когда вы выполняете тяжелое чтение одних и тех же блоков. Например. чтение одного и того же файла размером 1 gb_file снова и снова:
while true; do cat 1gb_file >/dev/null; done
Если ваша система имеет кэш> 1 ГБ, это будет работать быстро. Но если вы начнете использовать часть этого кеша для чего-то еще, это сократит производительность системы.
Итак, когда вы оцениваете свои решения, попробуйте описанное выше и посмотрите, учитывает ли это решение.
Поскольку то, что именно означает "доступная память", зависит от вашей цели, а ваша цель - избежать ситуаций OOM:
Посмотрите как Qt Extended (ранее Qtopia) предвидит ситуации OOM.
Есть два события:
/proc/meminfo
)/proc/vmstat
я думаю)Первое является ранним предупреждением о том, что памяти мало, и запускает более частый мониторинг pagefaults. Второй сигнализирует о выгрузке, которая убивает производительность системы и является хорошим намеком на то, что будет запущен OOM killer.