ВОЙТИ

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