opened image

Работа с кэшем и буферизированной памятью в Linux: Обзор и руководство по очистке

В рамках работы с Linux, буферная память функционирует как промежуточное хранилище данных, которые временно перемещаются из одного места в другое. Буфер содержит метаданные, улучшающие эффективность операций записи.

 

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

Теперь давайте разберемся, как можно очистить буферную память и кэш в Linux.

 

Очищаем кэш диска в Linux

Кэш диска или кэш страниц используется ядром Linux во время операций чтения и записи на диск. Для очистки кэша страниц используется следующая команда:


 
sync; echo 1 > /proc/sys/vm/drop_caches

 

Параметр drop_caches позволяет очистить кэш без преждевременного завершения работающих в системе приложений. Для проверки успешности очистки кэша можно воспользоваться командой:


 
free -h

 

Сравните показатели свободной памяти до:

 

И после:

 

Очищаем кэш Dentries и Inodes в Linux

 

Dentries – это структура данных, представляющая собой каталог или папку. Dentries можно использовать для создания или хранения кэша в памяти. Inodes – это элемент файловой системы Linux, хранящий метаданные файла, включая размер файла, его местоположение, разрешения, владельцев и т.д.

Для очистки dentries и inodes используйте следующую команду с правами пользователя root:

 
sync; echo 2 > /proc/sys/vm/drop_caches'

 

 

Очищаем Pagecache, Dentries и Inodes в Linux

 

Для очистки Pagecache (кэша диска), dentries и inodes одновременно можно воспользоваться следующей командой.

sync; echo 3 > /proc/sys/vm/drop_caches

 

 

Каждая из этих команд разделена на две части с помощью точки с запятой (;), которая располагается между командами sync и echo. Команда sync очищает буфер файловой системы, в то время как команда echo записывает в drop_cache, очищая кэш, но не завершая работу приложений или сервисов.

Однако использование параметра "...echo 3 >" не рекомендуется в производственной среде, поскольку он очищает все – кэш страниц, dentries и inodes – что может привести к сбоям в системе и повлиять на работу сервисов.

 

Если вы работаете с правами пользователя sudo, синтаксис команд немного изменится:

sudo sh -c 'echo 1 >/proc/sys/vm/drop_caches'

sudo sh -c 'echo 2 >/proc/sys/vm/drop_caches'

sudo sh -c 'echo 3 >/proc/sys/vm/drop_caches'

 

Следует ли очищать буфер и кэш в Linux?

 

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

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

 

Очистка области подкачки в Linux

 

Область подкачки – это область на жестком диске, которая используется при исчерпании оперативной памяти. Иногда возникает необходимость очистить область подкачки на вашем Linux-компьютере. Для этого можно воспользоваться следующей командой:

 
swapoff -a && swapon -a

 

 

Как результат, swap очищен:

 

Если нужно очистить и кэш, и область подкачки, можно использовать следующую команду:

echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'

 

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

free -h

 

 

Заключение

 

В данной статье мы подробно рассмотрели процесс очистки буферизированной памяти и кэша в Linux с помощью команды echo, направленной в файловую систему /proc. Обычно система Linux самостоятельно проводит очистку кэша, если это требуется, но в некоторых случаях может потребоваться вручную очистить кэш и буфер. В этом случае вы уже знаете, как это сделать.