Использование памяти в Linux

Использование памяти в Linux

Вокруг данной темы много недопонимания. Почему нет свободной памяти. Как это исправить и нужно ли вообще что либо делать?!

Что происходит?

Механизм дискового кэширования в ОС Linux заимствует неиспользуемую память для кэширования операций с диском, делая систему более отзывчивой.

Таким образом ускоряется доступ к часто запрашиваемым данным на диске, сохраняя в кэше оперативной памяти. Когда требуется доступ к новым данным, операционная система сначала проверяет, находятся ли данные в кэше, прежде чем читать их с диска. Скорость доступа к данным из оперативной памяти намного быстрее, чем с диска, поэтому кэширование дисковых операций может значительно повысить производительность всей системы. Многие методы кэширования также пытаются предсказать, какие данные будут запрошены дальше, чтобы они могли поместить эти данные в кэш заранее.

Кэширование диска занимает только оперативную память, которая в настоящее время не нужна приложениям. Кеширование диска не может использовать SWAP.

Если приложениям требуется больше памяти, они просто забирают часть, заимствованную дисковым кэшем. Дисковый кэш всегда может сразу вернуть используемые ресурсы приложениям!

Механизм дискового кэширования – создает впечатление, что у вас мало памяти, но это не так!

Как отключить механизм кеширования в Linux

Вы не можете отключить кеширование диска. Единственная причина, по которой кто-либо когда-либо хочет отключить кеширование диска, заключается в том, что они думают о нехватке оперативной памяти, а это не так! Дисковый кэш заставляет приложения загружаться быстрее и работать более плавно, но НИКОГДА не забирает у них память! Следовательно, нет никаких причин его отключать!

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

Начиная с версии Kernel 2.6.16 предоставляют механизм, позволяющий ядру сбрасывать кэш pagecache, dentries и inodes по команде, что может помочь освободить больше памяти 

Чтобы освободить pagecache:

echo 1 > /proc/sys/vm/drop_caches

Чтобы освободить dentries и inodes:

echo 2 > /proc/sys/vm/drop_caches

Чтобы освободить pagecache, dentries и inodes:

echo 3 > /proc/sys/vm/drop_caches

Это безопасная операция, которая освобождает только полностью не используемые объекты. Используемые же объекты будут находится в кэш памяти до тех пор, пока они не будут записаны на диск. Если вы сначала запустите операцию синхронизации кэш памяти и диска  – «sync», это позволит освободить больше памяти.

Почему утилиты и интерфейс показывают что память занята

Это просто разница в терминологии.

  • И вы, и Linux согласны с тем, что память, занятая приложениями, «Используется»
  • Память, которая ни для чего не используется, является «Свободной»
  • Вы можете считать эту память «Свободной» и/или «Доступной», а Linux использует ее, отсюда следует она «Используется», но также является «Доступной» по первому требованию
Память Вы бы назвали это Linux называет это
используется приложениями Используется Используется
используется, но может быть предоставлена Свободна Используется и доступна
ни для чего не используется Свободна Свободна
     

Сколько памяти свободно

Как мне узнать, сколько у меня действительно свободного оперативной памяти? Чтобы это узнать, сколько оперативной памяти ваши приложения могут использовать без Swap, запустите free и посмотрите на столбцы «free» и «available», это будет свободная и доступная память для приложений

[email protected]:/tmp/home/root# free
 total  used  free  shared buff/cache available
Mem: 903572 604464 299108 3180 64724 143612
Swap: 0 0 0

На некоторых устройствах вместо этого просмотрите столбец «free» в следующей строке «-/+ buffers/cache» 

[email protected]:/tmp/home/root# free
 total  used  free  shared  buffers cached
Mem:  440424  203044 137380  2400 112  116260
-/+ buffers/cache: 186672 253752
Swap: 0 0 0

Когда мне стоит волноваться?

Нормально работающее устройство с ОС Linux с достаточным объемом памяти, после запуска спустя некоторое время, может показывать

  • «free» память близка к 0
  • «used» память близка к «total»
  • «available» или «-/+ buffers/cache» памяти больше 20% от общего количества
  • «swap used» не меняется

Предупреждающие признаки реальной нехватки памяти, на которые вы можете обратить внимание

  • «free» и «available» или «-/+ buffers/cache» память близка к 0
  • «swap used» увеличивается или колеблется

Выводы

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


Дополнительные материалы