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