- How do you empty the buffers and cache on a Linux system?
- 1 Answer 1
- Emptying the buffers cache
- Seeing what’s in the buffers and cache
- fincore
- Swap
- Как опустошить буферную и кэш-память в Linux
- Что такое буферная и кэш-память в Linux
- Очистка дискового кэша в Linux
- Очистка кэш-памяти Dentries и Inodes в Linux
- Очистка Pagecache, Dentries и Inodes в Linux
- Хорошая ли идея освобождать буфер и кэш в Linux?
- Как очистить файл подкачки в Linux?
- Вывод
How do you empty the buffers and cache on a Linux system?
Prior to doing some benchmarking work how would one free up the memory (RAM) that the Linux Kernel is consuming for its buffers and cache? Note that this is mostly useful for benchmarking. Emptying the buffers and cache reduces performance! If you’re here because you thought that freeing buffers and cache was a positive thing, go and read Linux ate my RAM!. The short story: free memory is unused memory is wasted memory.
@innocent-world — never saw these when I was searching, so it appeared to be a hole in the knowledge base on this site, and was attempting to fill it in.
@innocent-world — in looking at those 2 Q’s I think there is still room for this Q&A. This one acts as a canonical Q&A on the site. Those are fairly specific in what they’re addressing. Additionally this one shows information about analyzing the buffers & cache and also how to set the parameters using sudo. Neither of the other 2 questions address any of this.
Please read this article linuxatemyram.com If you understand the risk then you can do free && sync && echo 3 > /proc/sys/vm/drop_caches && free
1 Answer 1
Emptying the buffers cache
If you ever want to empty it you can use this chain of commands.
# free && sync && echo 3 > /proc/sys/vm/drop_caches && free total used free shared buffers cached Mem: 1018916 980832 38084 0 46924 355764 -/+ buffers/cache: 578144 440772 Swap: 2064376 128 2064248 total used free shared buffers cached Mem: 1018916 685008 333908 0 224 108252 -/+ buffers/cache: 576532 442384 Swap: 2064376 128 2064248
You can signal the Linux Kernel to drop various aspects of cached items by changing the numeric argument to the above command.
# echo 1 > /proc/sys/vm/drop_caches
# echo 2 > /proc/sys/vm/drop_caches
# echo 3 > /proc/sys/vm/drop_caches
The above are meant to be run as root. If you’re trying to do them using sudo then you’ll need to change the syntax slightly to something like these:
$ 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'
NOTE: There’s a more esoteric version of the above command if you’re into that:
$ echo "echo 1 > /proc/sys/vm/drop_caches" | sudo sh
Why the change in syntax? The /bin/echo program is running as root, because of sudo , but the shell that’s redirecting echo’s output to the root-only file is still running as you. Your current shell does the redirection before sudo starts.
Seeing what’s in the buffers and cache
Take a look at linux-ftools if you’d like to analyze the contents of the buffers & cache. Specifically if you’d like to see what files are currently being cached.
fincore
With this tool you can see what files are being cached within a give directory.
fincore [options] files. --pages=false Do not print pages --summarize When comparing multiple files, print a summary report --only-cached Only print stats for files that are actually in cache.
For example, /var/lib/mysql/blogindex :
root@xxxxxx:/var/lib/mysql/blogindex# fincore --pages=false --summarize --only-cached * stats for CLUSTER_LOG_2010_05_21.MYI: file size=93840384 , total pages=22910 , cached pages=1 , cached size=4096, cached perc=0.004365 stats for CLUSTER_LOG_2010_05_22.MYI: file size=417792 , total pages=102 , cached pages=1 , cached size=4096, cached perc=0.980392 stats for CLUSTER_LOG_2010_05_23.MYI: file size=826368 , total pages=201 , cached pages=1 , cached size=4096, cached perc=0.497512 stats for CLUSTER_LOG_2010_05_24.MYI: file size=192512 , total pages=47 , cached pages=1 , cached size=4096, cached perc=2.127660 stats for CLUSTER_LOG_2010_06_03.MYI: file size=345088 , total pages=84 , cached pages=43 , cached size=176128, cached perc=51.190476 stats for CLUSTER_LOG_2010_06_04.MYD: file size=1478552 , total pages=360 , cached pages=97 , cached size=397312, cached perc=26.944444 stats for CLUSTER_LOG_2010_06_04.MYI: file size=205824 , total pages=50 , cached pages=29 , cached size=118784, cached perc=58.000000 stats for COMMENT_CONTENT_2010_06_03.MYI: file size=100051968 , total pages=24426 , cached pages=10253 , cached size=41996288, cached perc=41.975764 stats for COMMENT_CONTENT_2010_06_04.MYD: file size=716369644 , total pages=174894 , cached pages=79821 , cached size=326946816, cached perc=45.639645 stats for COMMENT_CONTENT_2010_06_04.MYI: file size=56832000 , total pages=13875 , cached pages=5365 , cached size=21975040, cached perc=38.666667 stats for FEED_CONTENT_2010_06_03.MYI: file size=1001518080 , total pages=244511 , cached pages=98975 , cached size=405401600, cached perc=40.478751 stats for FEED_CONTENT_2010_06_04.MYD: file size=9206385684 , total pages=2247652 , cached pages=1018661 , cached size=4172435456, cached perc=45.321117 stats for FEED_CONTENT_2010_06_04.MYI: file size=638005248 , total pages=155763 , cached pages=52912 , cached size=216727552, cached perc=33.969556 stats for FEED_CONTENT_2010_06_04.frm: file size=9840 , total pages=2 , cached pages=3 , cached size=12288, cached perc=150.000000 stats for PERMALINK_CONTENT_2010_06_03.MYI: file size=1035290624 , total pages=252756 , cached pages=108563 , cached size=444674048, cached perc=42.951700 stats for PERMALINK_CONTENT_2010_06_04.MYD: file size=55619712720 , total pages=13579031 , cached pages=6590322 , cached size=26993958912, cached perc=48.533080 stats for PERMALINK_CONTENT_2010_06_04.MYI: file size=659397632 , total pages=160985 , cached pages=54304 , cached size=222429184, cached perc=33.732335 stats for PERMALINK_CONTENT_2010_06_04.frm: file size=10156 , total pages=2 , cached pages=3 , cached size=12288, cached perc=150.000000 --- total cached size: 32847278080
With the above output you can see that there are several *.MYD, *.MYI, and *.frm files that are currently being cached.
Swap
If you want to clear out your swap you can use the following commands.
$ free total used free shared buffers cached Mem: 7987492 7298164 689328 0 30416 457936 -/+ buffers/cache: 6809812 1177680 Swap: 5963772 609452 5354320
Then use this command to disable swap:
You can confirm that it’s now empty:
$ free total used free shared buffers cached Mem: 7987492 7777912 209580 0 39332 489864 -/+ buffers/cache: 7248716 738776 Swap: 0 0 0
And now reconfirm with free :
$ free total used free shared buffers cached Mem: 7987492 7785572 201920 0 41556 491508 -/+ buffers/cache: 7252508 734984 Swap: 5963772 0 5963772
Как опустошить буферную и кэш-память в 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 регулярно очищает кэш, когда ситуация требует такого действия. Однако, если вам нужно вручную очистить кэш и буфер, эти инструкции вам пригодятся.
На этом все, если вам понравилась статья, не забудьте оставить нам свой ценный отзыв в комментариях
Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.