- Как освободить память Linux
- Как освободить кэш память в Linux
- Виды кэша в Linux
- Нужно ли очищать кэш вообще?
- Автоматическая очистка кэша
- Настройка размера кэша памяти
- Как очистить память подкачки
- Как освободить память занимаемую процессами
- Выводы
- Как опустошить буферную и кэш-память в Linux
- Что такое буферная и кэш-память в Linux
- Очистка дискового кэша в Linux
- Очистка кэш-памяти Dentries и Inodes в Linux
- Очистка Pagecache, Dentries и Inodes в Linux
- Хорошая ли идея освобождать буфер и кэш в Linux?
- Как очистить файл подкачки в Linux?
- Вывод
Как освободить память Linux
Как и любая другая операционная система, Linux очень эффективно работает с оперативной памятью. Доступная память свободно распространяется между процессами, неиспользуемые страницы сбрасываются в раздел подкачки на диске, а в случае переполнения памяти, срабатывает специальный механизм, встроенный в ядро, который анализирует все процессы и уничтожает виновника.
Когда любой процесс пишет данные на диск, они сохраняются ядром в отдельном кэше. Очень часто этот кэш занимает достаточно много места. В этой статье мы рассмотрим как освободить память в Linux, а точнее, как очистить созданный программами кэш, а также как вычислить и завершить процессы, которые потребляют больше всего памяти.
Как освободить кэш память в Linux
В каждом дистрибутиве Linux можно использовать три команды чтобы очистить кэш памяти linux. Причем вам не придется завершать никаких процессов. Сначала войдите в консоль от имени суперпользователя:
Затем выполните одну из команд. Очистка кэша PageCache:
sync; echo 1 > /proc/sys/vm/drop_caches
sync; echo 2 > /proc/sys/vm/drop_caches
Очистка inode и dentrie и PageCache:
sync; echo 3 > /proc/sys/vm/drop_caches
А теперь давайте рассмотрим что происходит при выполнении этих команд.
Утилита sync заставляет систему записать все кэшированные, но еще не записанные данные на диск. Это нужно чтобы освободить как можно больше памяти. По умолчанию данные после записи на диск не удаляются из кэша, это нужно для того, чтобы программа могла быстрее их считать при необходимости.
Если не выполнить команду sync мы тоже освободим немного места, но после ее выполнения результат будет лучше.
Символ разделения ; дает знать оболочке, что перед тем как выполнить другую команду, нужно дождаться завершения работы первой. Последняя команда echo 1 > /proc/sys/vm/drop_caches записывает значение 1 в файл /proc/sys/vm/drop_caches. Это дает сигнал ядру, что нужно очистить выбранный нами вид кэша.
Виды кэша в Linux
А теперь давайте рассмотрим виды кэша, которые позволяют очищать эти команды, а также как все это работает.
PageCache или страничный кэш — это место, куда ядро складывает все данные, которые вы записывали или читали из диска. Это очень сильно ускоряет работу системы, так как если программе во второй раз понадобятся те же данные, они просто будут взяты из оперативной памяти. Но по этой причине этот кэш занимает больше всего места.
Посмотреть размер страничного кэша можно с помощью утилиты free. Здесь он показан в последней колонке — cached:
Такой кэш чистить эффективнее и безопаснее всего.
Кэш inode и dentrie тоже относится к файловой системе. Только в него записываются не сами данные, а структура файловой системы, расположение файлов и папок. При запросе расположения файла или содержимого папки ядро формирует специальные структуры, в которых есть вся эта информация. При следующем запросе структуры будут уже сохранены в памяти. Для каждой файловой системы существует свой кэш inode и общий кэш dentrie.
Этот кэш занимает очень мало памяти. Данные представлены в байтах, и как видите, это очень мало. Посмотреть его можно командой:
cat /proc/slabinfo | egrep dentry\|inode
Очищать его чтобы освободить память linux не рекомендуется, так как памяти потребляется немного, а на новое сканирование файловой системы идет относительно много времени.
Нужно ли очищать кэш вообще?
Во-первых, если занято очень много памяти, вы можете очистить страничный кэш, особенно если это он занимает много памяти. Во-вторых, очистить кэш памяти linux может понадобиться, если вы изменяли какие-либо настройки файловой системы или ядра, а теперь хотите проверить как это отразилось на скорости операций чтения/записи. В таком случае можно очистить все кэши и сделать это без перезагрузки, что очень удобно.
Операционная система Linux разработана таким образом, что перед тем как обратиться к диску, будет просмотрен кэш диска, и если там есть нужные данные, к диску обращений не будет. Если очистить кэш Linux то операционная система будет работать немного медленнее, поскольку ей придется искать данные на диске.
Автоматическая очистка кэша
Давайте рассмотрим как автоматически очистить кэш памяти ежедневно в два часа ночи с помощью планировщика заданий cron.
Сначала создадим bash скрипт со следующим содержимым:
sudo vi /usr/local/bin/clearcache.sh
#!/bin/bash
sync ; echo 1 > /proc/sys/vm/drop_caches
Очищать будем только страничный кэш, так как он занимает больше всего. Другие виды трогать не будем, чтобы зря не понижать производительность системы.
Дальше сделайте скрипт исполняемым:
sudo chmod 755 /usr/local/bin/clearcache.sh
Осталось добавить задание в планировщик cron. Для этого выполните команду:
И в открывшемся редакторе добавьте строчку:
0 2 * * * /usr/local/bin/clearcache.sh
Теперь этот скрипт будет выполняться каждую ночь и выполнять очистку памяти, чтобы сервер мог работать нормально.
Настройка размера кэша памяти
Куда удобнее не очищать кэш каждый раз, а настроить ограничение, при превышении которого система сама будет удалять лишние страницы. Вы не можете явно ограничить сколько мегабайт может система использовать под кэш. Будет использоваться вся доступная память по мере необходимости, но можно настроить скорость удаления просроченных страниц из кэша.
За это отвечает файл /proc/sys/vm/vfs_cache_pressure. Он содержит относительный показатель, насколько агрессивно нужно удалять страницы из кэша. По умолчанию установлен параметр 100. Если его уменьшить ядро будет реже удалять страницы и это приведет к очень быстрому увеличению кэша. При нуле страницы вообще не будут удаляться. Если значение больше 100, размер кэша будет увеличиваться медленнее и неиспользуемые страницы будут сразу удаляться.
Например, сделаем минимальный размер кэша:
echo 1000 > /proc/sys/vm/vfs_cache_pressure
Не забудьте, что это очень сильно снизит производительность вашей системы, потому что вместо кэша данные будут читаться из диска.
Как очистить память подкачки
Пространство подкачки очистить очень просто. Для этого выполните:
Имейте в виду, что при очистке swap, все данные будут перенесены обратно в оперативную память.
Как освободить память занимаемую процессами
Если в вашей системе нет памяти и кэш здесь ни при чём, следует завершить несколько процессов, потребляющих больше всего памяти. Для этого сначала надо вычислить такие процессы. Чтобы это сделать можно воспользоваться утилитой ps:
ps -e -o pid,user,%mem,command —sort %mem
Как видите, больше всего здесь памяти занимает chromium. Теперь вам надо его завершить. Идентификатор процесса, по которому его можно завершить отображается в первой колонке. Поэтому:
Более подробно о том как завершить процесс читайте в этой статье. Таким образом, вы можете освободить память от процессов, которые занимают больше всего памяти, а потом уже настроить zram или swap для того, чтобы память не переполнялась.
Выводы
Вот и все. Вы уже знаете очистить кэш linux и освободить память. Не забудьте, что все команды, приведенные в этой статье нужно выполнять от имени суперпользователя, иначе ничего работать не будет. Если остались вопросы, спрашивайте в комментариях!
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Как опустошить буферную и кэш-память в Linux
Linux предоставляет эффективный механизм управления памятью, который обеспечивает оптимальное использование памяти различными программами и процессами. Однако, если несколько приложений занимают огромные куски оперативной памяти, вы можете захотеть очистить кэш. Существует несколько способов очистки кэша, не убивая запущенные процессы в системе. В этом руководстве мы рассмотрим, как можно очистить буфер памяти и очистить кэш в системе Linux. Перед тем, как продолжить, давайте, прежде всего, посмотрим, что такое буфер и кэш.
Что такое буферная и кэш-память в Linux
В более широком смысле, буфер – это область памяти, которая временно хранит данные в пути, т.е. данные, которые перемещаются из одной точки в другую. Он содержит метаданные, которые помогают повысить производительность записи. С другой стороны, кэш – это область временного хранения, в которой хранятся часто используемые данные для более быстрого доступа. Когда данные хранятся в кэше, доступ к ним в последующих случаях становится намного быстрее, так как данные извлекаются из кэшированной копии, а не из оригинала. Давайте посмотрим, как очистить буфер памяти и кэш в Linux.
Очистка дискового кэша в Linux
Страничный кэш, также называемый дисковым кэшем, – это кэш, используемый ядром Linux при чтении и записи на диск. Чтобы очистить страничный кэш, выполните следующую команду:
sync; echo 1 > /proc/sys/vm/drop_caches
Опция drop_caches очищает кэш без преждевременного завершения работы приложений в системе Linux. Чтобы убедиться, что кэш был очищен, выполните следующую команду.
Оцените разницу между свободной памятью до и после очистки кэша. В первом случае вы видите, что свободная память составляет 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
Вы можете очистить и кэш, и файл подкачки, объединив их в одну команду, как показано на рисунке.
echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a && printf ' %s ' 'Ram-cache and Swap Cleared'
Не забудьте выполнить команду free -h до и после выполнения скрипта, чтобы убедиться, что оперативная память была освобождена.
Вывод
В этой статье мы рассмотрели, как очистить буфер и кэш памяти путем отправки команды echo в файловую систему /proc. Вообще говоря, система Linux регулярно очищает кэш, когда ситуация требует такого действия. Однако, если вам нужно вручную очистить кэш и буфер, эти инструкции вам пригодятся.
На этом все, если вам понравилась статья, не забудьте оставить нам свой ценный отзыв в комментариях
Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.