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

Как и в любой другой операционной системе, в GNU/Linux эффективно реализовано управление памятью, и даже больше. Однако если какой-то процесс расходует вашу память и вы хотите её очистить, в Linux есть способ очистить кэш оперативной памяти.
В этой статье мы рассмотрим, как очистить кэш оперативной памяти, буфер и пространство подкачки в системе Linux, чтобы повысить общую производительность.
Что такое кэш оперативной памяти, буфер и пространство подкачки
Давайте рассмотрим кэш оперативной памяти, буфер и пространство подкачки в системе Linux.
Оперативная память кэш-память
Кэш оперативной памяти — это механизм, используемый ядром для хранения данных, к которым часто обращаются. Хотя это повышает скорость отклика системы, перегруженный кэш может приводить к сохранению устаревших данных, что негативно сказывается на производительности.
Буфер
Как и кэш, буфер временно хранит данные, но отличается от него назначением. Буферы хранят данные, передаваемые между такими компонентами, как центральный процессор и жёсткий диск, обеспечивая бесперебойную связь. Однако избыток буферизованных данных может снизить скорость работы системы.
Пространство подкачки
Раздел подкачки — это выделенная область на жёстком диске, которая используется как виртуальная память при нехватке физической оперативной памяти. Хотя она и предотвращает сбои системы из-за нехватки памяти, при чрезмерном использовании она может замедлять работу системы.
Очистка кэша, буфера и пространства подкачки в Linux
В некоторых ситуациях может потребоваться очистка кэша, буфера или пространства подкачки, как описано ниже.
Прежде чем начать, вы можете проверить текущее использование памяти с помощью:
free -h
или
vmstat -s
Это поможет вам убедиться, что очистка памяти действительно даёт видимый эффект.
Как очистить кэш оперативной памяти в Linux?
В любой системе Linux есть три способа очистить кэш, не прерывая работу процессов или служб.
Очистка кэша страниц
1. Чтобы очистить только PageCache, вы можете использовать следующую команду, которая очистит именно PageCache и поможет освободить ресурсы памяти.
sudo sync; echo 1 > /proc/sys/vm/drop_caches
Примечание: в некоторых системах команда echo может не работать из-за ограничений доступа. В этом случае используйте:
echo 1 | sudo tee /proc/sys/vm/drop_caches
Удаление дендритов и инодов
2. Чтобы очистить только dentries и inodes, можно использовать следующую команду, которая синхронизирует файловую систему и очистит как dentries, так и inodes, повысив производительность системы за счёт освобождения кэшированной информации о каталогах и inodes.
sudo sync; echo 2 > /proc/sys/vm/drop_caches
Очистка PageCache, записей и индексных дескрипторов
3. Чтобы очистить кэш страниц, d-записи и индексные дескрипторы, можно использовать следующую команду, которая синхронизирует файловую систему и очистит кэш страниц, d-записи и индексные дескрипторы, что поможет освободить память и повысить производительность системы.
sudo sync; echo 3 > /proc/sys/vm/drop_caches
Опять же, если описанный выше способ не работает из-за отсутствия разрешений, используйте:
echo 3 | sudo tee /proc/sys/vm/drop_caches
После очистки вы можете повторно проверить использование памяти с помощью:
free -h
Ниже приводится объяснение каждой части приведённой выше команды:
sudo
используется для выполнения команды от имени суперпользователя.sync
очистит буфер файловой системы.- Точка с запятой
“;”
используется для разделения нескольких команд в одной строке. - Команда
echo 3 > /proc/sys/vm/drop_caches
используется для очистки кэша страниц — временного хранилища недавно использованных файлов.
Примечание: файл drop_caches
определяет, какой тип кэшированных данных следует очистить. Значения следующие:
1
— Очищает только кэш страницы.2
— Очищает зубные протезы и иноды.3
— Очищает кэш страниц, данные и индексные дескрипторы.
Как указано в документации ядра, запись в drop_caches очистит кэш без остановки какого-либо приложения/службы. команда echo выполняет запись в файл.
Если вам нужно очистить кэш диска, то в корпоративной среде и на производстве безопаснее всего использовать первую команду, так как “...echo 1 > ….”
очистит только PageCache.
Не рекомендуется использовать третий вариант “...echo 3 >”
в рабочей среде, пока вы не поймёте, что делаете, так как он очищает pagecache, dentries, и inodes.
Как очистить пространство подкачки в Linux?
Чтобы освободить место подкачки, можно использовать команду swapoff с параметром -a
, которая отключит все разделы подкачки.
sudo swapoff -a
Затем верните его в исходное состояние, выполнив следующую команду, которая активирует все разделы подкачки.
sudo swapon -a
Стоит ли освобождать буфер, кэш и оперативную память в Linux?
В целом не рекомендуется вручную освобождать буфер и кэш в Linux, которые могут использоваться ядром Linux, предназначенным для эффективного управления этими ресурсами. Ручная очистка может привести к снижению производительности системы.
Однако могут возникнуть редкие ситуации, когда вам потребуется очистить буфер и кэш, например, если у вас сильно не хватает памяти и вы не можете освободить её другими способами. В таких случаях следует действовать осторожно и помнить о возможном снижении производительности.
Точно так же очистка пространства подкачки в Linux, как правило, не является стандартной или рекомендуемой процедурой в обычных условиях.
Автоматическая Оптимизация памяти
Чтобы автоматизировать процесс и регулярно очищать память, вы можете настроить задание cron для запуска команд через определённые промежутки времени.
Откройте конфигурацию crontab.
crontab -e
Добавьте следующие строки, чтобы ежедневно в полночь очищать кэш, буфер и пространство подкачки:
0 0 * * * sudo sync; echo 3 > / proc/sys/vm/drop_caches 0 0 * * * sudo echo 1 > / proc/sys/vm/drop_caches 0 0 * * * sudo sync; echo 2 > /proc/sys/vm/drop_caches 0 0 * * * sudo swapoff -a && sudo swapon -a
Примечание: sudo
может не работать в crontab, если не используется crontab пользователя root или для этих команд не настроено sudo без пароля. Рассмотрите возможность размещения команд в скрипте и планирования его выполнения.
Стоит ли очищать кэш оперативной памяти на рабочем сервере Linux?
Нет, это не так. Рассмотрим сценарий, в котором вы настроили скрипт для очистки кэша оперативной памяти каждый день в 2 часа ночи. Каждый день в 2 часа ночи скрипт выполняется и очищает кэш оперативной памяти. Однако в один из дней на вашем сайте неожиданно появляется большое количество пользователей, что значительно увеличивает нагрузку на сервер.
В то же время запускается запланированный скрипт, который очищает всё в кэше. Теперь все пользователи получают данные с диска, что может привести к сбою сервера и повреждению базы данных. Поэтому важно очищать кэш оперативной памяти только при необходимости и внимательно следить за своими действиями. В противном случае вы рискуете стать системным администратором Cargo Cult.
Заключение
Эффективное управление памятью имеет решающее значение для бесперебойной работы системы Linux. Регулярная очистка кэша оперативной памяти, буфера и пространства подкачки может значительно повысить производительность системы. Понимая эти механизмы и используя предоставленные команды, вы сможете обеспечить оптимальную работу системы Linux.
На этом пока всё. Если вам понравилась статья, пожалуйста, не забудьте поделиться своим мнением в комментариях. Расскажите нам, какой, по вашему мнению, подход лучше всего подходит для очистки кэша и буфера оперативной памяти в производственных и корпоративных средах.
Редактор: AndreyEx