В чем разница между отчетом об использовании памяти в системном мониторе и бесплатным?

14

Я использую системный монитор 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

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

Благодарность

Гийом Котэ
источник

Ответы:

15

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

Обычно системная память 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) в use, что соответствует объему памяти, о котором сообщается, который используется системным монитором (он игнорирует буферы / кэшированные, потому что они уйдут, чтобы освободить место для большего количества процессов).

Ваш grep против /proc/meminfoфактически соответствует столбцу «free» первой строки (32512 достаточно близко к 34536 - он, вероятно, изменился между двумя выходными данными команды).

Кис Кук
источник
Спасибо, я удивляюсь, почему системе потребовалось 1,5 гигабайта в кеше, но это проясняет ситуацию.
Гийом Котэ
1
Это не столько вопрос «необходимости», сколько «использованный». В тот момент он считал по крайней мере столько же с жесткого диска и сохранил его в свободной памяти на случай, если понадобится снова его использовать.
Кис Кук
0

Когда я получил доступ к системному монитору, использование памяти, указанное на вкладке «Ресурсы», было таким же, как в freeстолбце /usr/bin/free.

Проблема в том, что свободной физической памяти рано или поздно почти 0: Linux кешируется агрессивно, поэтому деньги, потраченные на покупку оперативной памяти, используются эффективно. А это означало, что график будет постоянно показывать> 98% использования памяти, что было бесполезно.

Поэтому я / мы решили сделать так же, как -/+ buffers/cache:линия /usr/bin/free. Таким образом, график имеет смысл и позволяет пользователю наблюдать за использованием памяти приложения / пользовательского пространства вместо физического состояния памяти.

Я знаю, это немного вводит в заблуждение, потому что большинство (l) пользователей не понимают, что свободная физическая память - это пустая трата денег и производительности. На работе я сталкивался с одной и той же проблемой: каждый понедельник серверы перезагружались, а в следующие 24 часа каждый сервер вызывал предупреждение «переполнение памяти». Таким образом, в программном обеспечении наблюдения было зафиксировано вычисление свободной памяти, как в системном мониторе.

В текущем Solaris та же проблема: кэш ZFS (ARC) не включен в свободную память, о которой сообщают такие инструменты, как vmstatглупые администраторы БД, которые жалуются, что «ZFS плохая» :)

Benoît
источник