Через несколько дней память поднимается до 90%, а затем остается там. Это утечка памяти? Как определить, какие процессы используют кэшированную память?

3

У меня есть NAS с веб-ОС Cutom и запущенными тоннами демонов, которые вместе образуют систему, дополняющую IP-камеры Mobotix.

В последние недели у меня возникла небольшая проблема - встроенный монитор ресурсов показывает увеличение использования памяти примерно на 10% в день. Как только он достигает 90%, он просто сидит там в диапазоне +/- 1%.

Я также вычисляю то, что я называю оптимизированной памятью. То есть, удаляются буферы и добавляется кеш, они остаются на ~ 20% каждый день.

Выход по freeсостоянию на сейчас:

             total       used       free     shared    buffers     cached  
Mem:       1901072    1731036     170036          0     146228    1207360  
-/+ buffers/cache:     377448    1523624  
Swap:      1048572       1648    1046924  

Как вы можете видеть, память почти заполнена, но кэшированная / буферизированная, кажется, занимает большую часть памяти.

У меня такое ощущение, что это вызвано утечкой памяти где-то, но я не уверен.

Как определить, какие процессы заполняют буферизованную / кэшированную память?

joltmode
источник
Почему вы все равно хотите, чтобы память была свободной? Если вы думаете: «Я хочу, чтобы он был свободен сейчас, чтобы я мог использовать его позже», забудьте об этом. Вы можете использовать его сейчас и использовать его позже. Здесь нет компромисса. Свободная память не лучше, чем память, которой нет в вашем компьютере. Только память , которая в настоящее время используется влияет на производительность.
Дэвид Шварц
Меня не волнует, будет ли он бесплатным или полностью использованным, или что-то в этом роде, я просто был не уверен, что является причиной этого, и должен ли я быть в поиске решения потенциальной проблемы.
joltmode

Ответы:

5

Это не проблема, Linux должен это делать. Если бы у вас действительно были проблемы с памятью, вы бы заметили, что все работает медленно и процессы убиваются OOM killer .

Ядро Linux использует неиспользуемую оперативную память для кэширования диска. Это хорошо, это заставляет все работать быстрее. Эта память все еще доступна для любой программы, которая нуждается в ней, она будет использоваться только для кэширования, если она не нужна где-либо еще. Вот почему freeпоказывает buffers/cacheотдельно, вы должны рассматривать их как свободную память.

Фактический объем памяти, доступный вашей системе, равен free+ buffers+ cache, в приведенном вами примере 170036 + 146228 + 1207360 = 1523624это ~ 1,5 ГБ свободной памяти.

Это довольно хорошо объясняется в документации RedHat :

В этом примере общий объем доступной памяти составляет 4040360 КБ. 264224 КБ используются процессами, а 3776136 КБ бесплатны для других приложений. Не смущайтесь первой строкой, которая показывает, что 28160KB свободны! Если вы посмотрите на показатели использования, вы увидите, что большая часть памяти используется для буферов и кеша. Linux всегда пытается использовать оперативную память для ускорения дисковых операций, используя доступную память для буферов (метаданные файловой системы) и кеша (страницы с фактическим содержимым файлов или блочных устройств). Это помогает системе работать быстрее, потому что информация о диске уже находится в памяти, что сохраняет операции ввода-вывода. Если место требуется программам или приложениям, таким как Oracle, Linux освободит буферы и кэш, чтобы освободить память для приложений. Если ваша система работает некоторое время, вы обычно увидите небольшое число под полем «free» в первой строке.

Для получения дополнительной информации см. Здесь:

terdon
источник
Дал бы еще один плюс для Linux Ate My Ram. Спасибо за объяснение, теперь все ясно.
2013 г.