В рамках работы с 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 самостоятельно проводит очистку кэша, если это требуется, но в некоторых случаях может потребоваться вручную очистить кэш и буфер. В этом случае вы уже знаете, как это сделать.