Как опустошить буферную и кэш-память в Linux

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

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

Перед тем, как продолжить, давайте, прежде всего, посмотрим, что такое буфер и кэш.

Что такое буферная и кэш-память в Linux

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

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

Давайте посмотрим, как очистить буфер памяти и кэш в Linux.

Очистка дискового кэша в Linux

Страничный кэш, также называемый дисковым кэшем, – это кэш, используемый ядром Linux при чтении и записи на диск. Чтобы очистить страничный кэш, выполните следующую команду:

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

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

free -h

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

В первом случае вы видите, что свободная память составляет 342 МБ. После очистки кэша страниц она увеличивается до 1,3 ГБ. Кроме того, обратите внимание, что буфер/кэш был очищен с 1.3GB до 329MB.

Очистка кэш-памяти Dentries и Inodes в Linux

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

Чтобы очистить дентри и иноды, выполните следующую команду от имени пользователя 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 и таким образом очищает кэш, не убивая ни одного приложения/сервиса.
  • Затем вернемся к запятой, которая инструктирует оболочку выполнить первую команду и после ее выполнения выполнить следующую. Таким образом, в данном случае сначала выполняется команда sync, а затем команда echo.

ПРИМЕЧАНИЕ: Для очистки дискового кэша первая команда является наиболее безопасной как в корпоративной, так и в производственной среде, поскольку "...echo 1 > …." очищает только PageCache.

Третий вариант "...echo 3 >" не рекомендуется использовать в производственных средах, поскольку он очищает все – кэш страниц, дентри и иноды – что может привести к поломке системы и повлиять на производственную нагрузку.

Команды, которые мы только что рассмотрели, предназначены для выполнения от имени root. Если вы выполняете их от имени пользователя 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?

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

Чтобы очистить файл подкачки, просто выполните следующую команду от имени root

swapoff -a && swapon -a

Вы можете очистить и кэш, и файл подкачки, объединив их в одну команду, как показано на рисунке.

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

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

# free -h

Вывод

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

На этом все, если вам понравилась статья, не забудьте оставить нам свой ценный отзыв в комментариях

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Похожие статьи

Комментарии (0)