Я использую системный монитор 2.28.0. Когда я смотрю на вкладке «Ресурсы», я вижу хороший график для памяти и подкачки. Память составляет около 60% 2,3 ГиБ из 3,8. Когда я набрал команду free, я получил:
total used free shared buffers cached
Mem: 3994908 3962396 32512 0 100852 1477032
-/+ buffers/cache: 2384512 1610396
Swap: 8000328 28468 7971860
cat / proc / meminfo | grep MemFree give
MemFree: 34536 kB
Ситуация сохранялась в течение нескольких минут. Я начал много процесса со сценарием, и сценарий ожидает освобождения свободной памяти. В соответствии с тем, что я вижу на вкладке «Процесс» (или сверху), число в системном мониторе кажется слишком закрытым для общего объема памяти процесса, который сообщается бесплатно.
Спасибо
Разница в том, включена ли "буферная" и "кэшированная" память в счет "использованных" или нет.
Обычно системная память Linux используется ядром для двух целей: процессы и файловый/сетевой кэш/буферы. Если внимательно посмотреть на вывод free
, то уже показано:
total used free shared buffers cached
Mem: 3994908 3962396 32512 0 100852 1477032
-/+ buffers/cache: 2384512 1610396
Swap: 8000328 28468 7971860
Если добавить "буферы" и "кэш", а затем вычесть это из столбца "used", то получится вторая строка под "used" (строка, которая начинается с -/+ буферов/кэша
), которая показывает около 2. 3G (2384512), которая соответствует используемой памяти, о которой сообщает System Monitor (он игнорирует буферы/кэшированные данные, потому что они уйдут, чтобы освободить место для большего количества процессов).
Ваша grep против /proc/meminfo
на самом деле соответствует столбцу "свободный" в первой строке (32512 достаточно близко к 34536 -- скорее всего, он изменился между двумя выходами команд).
Когда я взял в руки системный монитор, использование памяти, указанное на вкладке «Ресурсы», было таким же, как в столбце свободно
в / usr / bin / free
.
Проблема в том, что свободной физической памяти рано или поздно становится почти 0: Linux активно кэширует, поэтому деньги, потраченные на покупку ОЗУ, используются эффективно. А это означало, что график будет постоянно показывать> 98% использования памяти, что было бесполезно.
Итак, я / мы решили сделать то же, что и - / + buffers / cache:
строка из / usr / bin / free
.
Таким образом, график становится осмысленным и позволяет пользователю наблюдать за использованием памяти приложением / пользовательской средой вместо физического состояния памяти.
Я знаю, это немного вводит в заблуждение,потому что большинство (l) пользователей не понимают, что свободная физическая память - это пустая трата денег и производительности. На работе я столкнулся с той же проблемой: каждый понедельник серверы перезагружались, а в следующие 24 часа каждый сервер вызывал предупреждение о заполнении памяти. Таким образом, у меня было исправлено вычисление свободной памяти в программном обеспечении для наблюдения, как и в системном мониторе.
Текущая версия Solaris имеет ту же проблему: кэш ZFS (ARC) не включается в свободную память, сообщаемую такими инструментами, как vmstat
, из-за чего глупые администраторы БД жалуются, что «ZFS - это плохо» :)