Как надежно измерить доступную память в Linux?

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 использует "свободный" + "кэшируемый" в ее "скорректированном буфером" дисплее, таким образом, мне любопытно, каков лучший подход.

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

19
задан Alex B 11 June 2010 в 02:01
поделиться

3 ответа

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

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

2
ответ дан 30 November 2019 в 05:01
поделиться

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

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

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

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

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

3
ответ дан 30 November 2019 в 05:01
поделиться

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

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

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

  • (MemFree + Buffers + Cached) / MemTotal < treshold (в /proc/meminfo)
  • Major pagefaults > treshold (pgmajfault в /proc/vmstat я думаю)

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

8
ответ дан 30 November 2019 в 05:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: