Оптимизация Linux под нагрузку. Кэширование операций записи на диск

07.04.2023

Когда дело доходит до оптимизации производительности системы Linux, физическая память является самым важным фактором. Естественно, Linux предлагает множество вариантов, чтобы контролировать использование драгоценного ресурса памяти. Различные инструменты различаются с точки зрения их детализации мониторинга (например, в рамках всей системы, на процесс, на пользователя), интерфейса (например, графический, командной строки, ncurses) или режима работы (например, интерактивный, пакетный режим).

Вот неполный перечень программ с графическим интерфейсом или командной строкой, чтобы вам было из чего выбрать, для проверки используемой и свободной памяти на платформах Линукс.

1. /proc/meminfo

Самый простой способ проверить использование оперативной памяти — через /proc/meminfo. Этот динамично обновляемый виртуальный файл, на самом деле, источник отображаемой информации для многих других, связанных с памятью, инструментами, такими как free, top и ps tools. От количество доступной/физической памяти до количества буфера, ожидаемого для записи обратно на диск, /proc/meminfo имеет всё, что вы хотите знать об использовании системной памяти. Информация о памяти процессами также доступна из /proc//statm и /proc//status

$ cat /proc/meminfo

2. atop

Команда atop — это основанная на интерфейсе ncurses интерактивная система и наблюдатель процессов для терминального окружения. Он показывает динамически обновляемую краткую информацию о системных источниках (процессор, память, сеть, ввод/вывод, ядро) с цветными предупреждениями в случае высокой загрузки системы. Он также может отсортировать процессы (или пользователей) в порядке наибольшего потребления ресурсов ими, так, что системный администратор может сказать, какой процесс или пользователь ответственен за загрузку системы. Отчёты по статистике памяти включают общую/свободную память, кэшированную/буферезированную память и информацию по виртуальной памяти.

$ sudo atop

3. free

Команда free — это быстрый и простой способ получить обзор использования памяти, почерпнутые из /proc/meminfo. Она показывает снимок общей/доступной физической памяти и подкачу системы также как используемое/свободное буферное пространство в ядре.

4. GNOME System Monitor

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

$ gnome-system-monitor

5. htop

Команда htop — это основанный на ncurses интерактивный просмотрщик процессов, который показывает использование памяти по процессам в реальном времени. Он может сообщить размер занимаемой памяти процессом в основной памяти (RSS), общий размер программы в памяти, размер библиотеки, размер общей страницы, и размер грязной страницы (в кэше) для всех запущенных процессов. Вы можете горизонтально или вертикально промотать (отсортированный) список всех процессов.

6. KDE System Monitor

В то время как рабочий стол GNOME имеет GNOME System Monitor, рабочий стол KDE имеет свой собственный аналог: KDE System Monitor. Его функциональность преимущественно схожа с версией GNOME, т. е. Показ в реальном времени историю использования системных ресурсов, также как и потребление процессора/памяти отдельными процессами.

$ ksysguard

7. memstat

Утилита memstat — это полезный для выявления какой (какие) исполняемый(ые) процесс(ы) и разделяемые библиотеки потребляют виртуальную память. Получая ID процесса, memstat выявляет как много виртуальной памяти использовано связанными с этим процессом исполнимым кодом, данными и разделяемыми библиотеками.

$ memstat -p

8. nmon

Утилита nmon — это основанный на ncurses инструмент системного бенчмарка, который мониторит центральный процессор, память, дисковый ввод/вывод, ядро, файловую систему и сетевые источники в интерактивном режиме. По использованию памяти он может показать такую информацию как общую/свободную память, место подкачки, буферизованную/кэшированную память, статистику загруженной/выгруженной виртуальной памяти, это всё в реальном времени.

9. ps

Команда ps может показать использование памяти отдельными процессами в реальном времени. Отображаемая информация использования памяти включает %MEM (процент от используемой физической памяти), VSZ (общее количество используемой виртуальной памяти) и RSS (общее количество используемой физической памяти). Вы можете отсортировать список процессов, используя опцию "–sort". Например, для сортировки по убыванию RSS:

$ ps aux --sort -rss

10. smem

Команда smem позволяет вам измерять использование физической памяти различными процессами и пользователями, основываясь на информации, доступной из /proc. Эта утилита использует метрику пропорционально установленного размера (PSS), для точной оценки использования процессами Linux размера эффективной памяти. Анализ использования памяти может быть экспортирован в графические диаграммы в виде столбиков и нарезанных на части кнугов.

$ sudo smem --pie name -c "pss"

11. top

Команда top предлагает наблюдение за запущенными процессами в реальном времени вместе с различными статистиками процессов использования ресурсов. Связанная с памятью информация включает %MEM (процент используемой памяти), VIRT (общее количество используемой виртуальной памяти), SWAP (количество подкаченной виртуальной памяти), CODE (количество физической памяти, выделенной для исполнения кода), DATA (количество физической памяти выделенной для не-исполнимых данных), RES (общее количество используемой физической памяти, CODE+DATA) и SHR (количество потенциально разделённой памяти с другими процессами). Вы можете отсортировать список процессов, основываясь на использование памяти или размере.

12. vmstat

Утилита командной строки vmstat отображает немедленную и среднюю статистику различных системных активностей, включая центральный процессор, память, прерывания и дисковый ввод/вывод. Как источник информации по памяти, эта команда показывает не только использование физической памяти (например, общей/используемой памяти и буфер/кэш памяти), но также статистику виртуальной памяти (например, память загруженных/выгруженных страниц, подгруженную/загруженную).

The vmstat command-line utility displays instantaneous and average statistics of various system activities covering CPU, memory, interrupts, and disk I/O. As for memory information, the command shows not only physical memory usage (e.g., tota/used memory and buffer/cache memory), but also virtual memory statistics (e.g., memory paged in/out, swapped in/out).

$ vmstat -s

Ядро Linux сконструировано таким образом, что память в данной операционной системе используется с расчетом на максимальную производительность всей системы. И тут стоит сравнить две памяти: медленную и быструю — оперативную память и память жесткого диска(SSD-диска). Скорость чтения/записи в оперативную память намного превышает скорость доступа к жесткому диску. А значит напрашивается вполне элементарный вывод: лучше читать из оперативной памяти, нежели тот же файл с жесткого диска. Однако учитывая ограниченное количество оперативной памяти нельзя хранить все что попало в оперативной памяти, так как главное предназначение оперативной памяти — работа с приложениями.

Как Linux(CentOS) использует оперативную память

Вернемся к конструкции Linux(CentOS), которая кэширует в оперативную память все файлы, которые были запрошены с моменты запуска компьютера. Это и называется файловый кэшем CentOS и который и является основным виновников всех криков и ругательств по поводу того, что Linux съел всю вашу оперативную память. Разумеется, с переполнением оперативной памяти малоиспользуемые файлы будут выкинуты и перезаписаны новыми файлами, а так же опустошать файловый кэш на тот размер, который запросят приложения. Для досконального разбора ситуации приведем вывод top с моего сервера:

Нас будут интересовать последний две строки. Строка Mem: показывает использование оперативной памяти. Первое значение с подписью total обозначает что используется система с 2 ГБ ОЗУ. Далее идет значение в 500+ МБ с припиской used, которая указывает сколько памяти занято на данный момент. После этого идет значение с припиской free , что говорит о свободной памяти. Далее приписка buffers — что то связано с буферами хз чего(пока не несет серьезной нагрузки в этой статье). И самое интересное, это последний пункт из последней строчки с припиской cached — показывает сколько памяти было использовано под файловый кэш, про который и шла речь чуть выше.

Исходя из приведенного скрина выходит, что оперативная память забита на 530МБ и что доступными для дальнейшего использования только 1.4 ГБ памяти.(Приведенный скрин не совсем хорошо описывает всю прелесть файлового кэша, когда после нескольких часов работы компьютера оперативка забивается на 90-95 процентов. Тут же приведен скрин работы после нескольких минут после включения компьютера).

Однако не деле же свободной являются 1,65 ГБ памяти, что выходит если сложить свободную память(free) и закэшированную память(cached) вместе. Это справедливо благодаря тому, что файловый кэш CentOS выделит занятые просторы оперативной памяти, если это понадобиться какому-то приложению или самой системе. Таким образом, под приложения и ОС(на данный момент) может быть выделено еще 250МБ, которая сейчас используется под файловый кэш.

Поэтому когда вы видите пугающе маленькие значения в поле free не забывайте прибавить к этому и значение поля cached. Тогда вы и получите полный объем свободной оперативной памяти . Исходя из всего этого можно вообще отказаться от каких-либо изменений в работе Linux(CentOS), так как действия ОС не слишком агрессивны и столь необходимая оперативная память для ваших приложений всегда будет доступна.

Проблемы при слишком большом файловом кэше

Однако на своем опыте скажу, что когда под файловый кэш вкупе с приложениями выделяется более 90-95% всей оперативной памяти, то дальнейшая работа всей системы несколько замедляет. Так как настройкой я занимался именно веб-сервера, то самым лучшим показателем тут становится быстродействие сайтов, которое начинает хромать при практически полностью заполненной ОЗУ. К тому же замечено, что при заполненной ОЗУ увеличивается работа центрального процессора, который постоянно решает что выкинуть из ОЗУ и что туда добавить. Поэтому было принято решение ограничить максимальный размер файлового кэша CentOS .

Очищение файлового кэша CentOS

В этом направление многие предлагают вручную очищать файловый кэш, а чтобы автоматизировать этот процесс, записать задание в cron с запуском раз в день, или раз в несколько часов. Для более полной картины приведу эту команду:

sh -c ‘echo 1 > /proc/sys/vm/drop_caches"

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

Ограничение размера файлового кэша

Для этого нам необходимо изменить значение в файле /proc/sys/vm/min_free_kbytes на то значение, которое вы хотите чтобы не выделялось под файловый кэш. Другими словами, указанный вами в КБ размер оперативной памяти всегда будет оставаться пустым, не занятым файловым кэшем. Честно сказать, не нашел более конкретный материал в котором было бы сказано как именно этот параметр работает:

  1. Оставляет под приложения и систему указанный объем исходя из всего объема ОЗУ? или
  2. Оставляет под приложения и систему указанный объем исходя из свободной ОЗУ?

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

Но вернемся к файлу, которому я задал значение 700000, то есть 700 МБ. Сразу после изменения вы уже заметите изменения, так как файловый кэш будет сброшен настолько, чтобы удовлетворить новые требования. Однако такое состояние будет длиться только до ближайшей перезагрузки и потому нам нужно закрепить свои действия. Для этого в файл /etc/sysctl.conf дописать строчку

vm.min_free_kbytes=700000

Разумеется тут нужно указать ваше значение. Можете перезагрузить и проверить файл /proc/sys/vm/min_free_kbytes значение которого не должно смениться на значение по умолчанию.

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

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

Часто важно проверить использование общей памяти и памяти, используемой в процессе на серверах, а так же неиспользуемые ресурсы. Если вы работаете на веб-сервере, то сервер должен иметь достаточно памяти, чтобы обслуживать посетителей сайта. Если такого не будет, то сайт станет очень медленным или даже стать недоступным, когда будет всплеск трафика, просто потому, что памяти будет не хватать. Тоже самое, как и то, что происходит на настольном компьютере.

1. Команда free

Команда free является самой простой и легкой в использовании командой, чтобы проверить использование памяти на Linux. Вот краткий пример

$ free -m total used free shared buffers cached Mem: 7976 6459 1517 0 865 2248 -/+ buffers/cache: 3344 4631 Swap: 1951 0 1951

Опция -m отображает все данные в мегабайтах. Общий общий объем оперативной памяти 7976 МБ, установленной в системе, то есть 8 Гб. Колонка used показывает объем оперативной памяти, которая может быть использована на Linux, в нашем случае составит около 6,4 Гб. Загвоздкой здесь является колонки cached и buffers . Вторая строка говорит, что 4,6 Гб свободно. Это свободная память в первой строке с добавлением буферов и объема памяти кэша.

Linux имеет привычку кэшировать для повышения производительности, так что память может быть освобождена и использована при необходимости.
Последняя строка, это подкачка памяти (swap ), который в этом случае полностью свободна.

2. /proc/meminfo

Следующий способ проверить использование памяти, прочитать файл /proc/meminfo. Знайте, что файловая система /proc не содержит реальных файлов. Они являются виртуальными файлами, которые содержат динамическую информацию о ядре и системы.

$ cat /proc/meminfo MemTotal: 8167848 kB MemFree: 1409696 kB Buffers: 961452 kB Cached: 2347236 kB SwapCached: 0 kB Active: 3124752 kB Inactive: 2781308 kB Active(anon): 2603376 kB Inactive(anon): 309056 kB Active(file): 521376 kB Inactive(file): 2472252 kB Unevictable: 5864 kB Mlocked: 5880 kB SwapTotal: 1998844 kB SwapFree: 1998844 kB Dirty: 7180 kB Writeback: 0 kB AnonPages: 2603272 kB Mapped: 788380 kB Shmem: 311596 kB Slab: 200468 kB SReclaimable: 151760 kB SUnreclaim: 48708 kB KernelStack: 6488 kB PageTables: 78592 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 6082768 kB Committed_AS: 9397536 kB VmallocTotal: 34359738367 kB VmallocUsed: 420204 kB VmallocChunk: 34359311104 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 62464 kB DirectMap2M: 8316928 kB

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

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

В каждом дистрибутиве Linux можно использовать три команды чтобы очистить кэш памяти linux. Причем нам не придется завершать никаких процессов. Вот эти команды:

Очистка кэша PageCache:

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

Очистка inode и dentrie:

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

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

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

Как очистить память подкачки

Пространство подкачки очистить очень просто. Для этого выполните:

swapoff -a && swapon -a

Имейте в виду, что при очистке swap, все данные будут перенесены обратно в оперативную память.

Выводы

Вот и все. Вы уже знаете очистить кэш linux и освободить память. Не забудьте, что все команды, приведенные в этой статье нужно выполнять от имени суперпользователя, иначе ничего работать не будет. Если остались вопросы, спрашивайте в комментариях!

Похожие записи:



В каждом дистрибутиве Linux можно использовать три команды чтобы очистить кэш памяти linux. Причем нам не придется завершать никаких процессов. Вот эти команды:

Очистка кэша PageCache:
# sync; echo 1 > /proc/sys/vm/drop_caches
Очистка inode и dentrie:
# sync; echo 2 > /proc/sys/vm/drop_caches
Очистка inode и dentrie и PageCache:
# sync; echo 3 > /proc/sys/vm/drop_caches
Перед тем как выполнять любую из этих команд выполните:
$ su -
Это нужно потому, что для работы каждой из команд необходимы права суперпользователя. А теперь давайте рассмотрим что происходит при выполнении этих команд.

Утилита sync заставляет систему записать все кэшированные, но еще не записанные данные на диск. Это нужно чтобы освободить как можно больше памяти. По умолчанию данные после записи на диск не удаляются из кэша, это нужно для того, чтобы программа могла быстрее их считать при необходимости.

Если не выполнить команду sync мы тоже освободим немного места, но после ее выполнения результат будет лучше.

Символ разделения; дает знать оболочке, что перед тем как выполнить другую команду, нужно дождаться завершения работы первой. Последняя команда echo 1 > /proc/sys/vm/drop_caches записывает значение 1 в файл /proc/sys/vm/drop_caches . Это дает сигнал ядру, что нужно очистить выбранный нами вид кэша.

Виды кэша в Linux

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

PageCache или страничный кэш - это место, куда ядро складывает все данные, которые вы записывали или читали из диска. Это очень сильно ускоряет работу системы, так как если программе во второй раз понадобятся те же данные, они просто будут взяты из оперативной памяти. Но по этой причине этот кэш занимает больше всего места.

Посмотреть размер страничного кэша можно с помощью утилиты free. Здесь он показан в последней колонке - cached:
$ free -h

Такой кэш чистить эффективнее и безопаснее всего.

Кэш 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. Для этого выполните команду:
$ sudo crontab -e
И в открывшемся редакторе добавьте строчку:
0 2 * * * /usr/local/bin/clearcache.sh
Теперь этот скрипт будет выполняться каждую ночь и выполнять очистку памяти, чтобы сервер мог работать нормально.

Настройка размера кэша памяти

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

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

Например, сделаем минимальный размер кэша:
# echo 1000 > /proc/sys/vm/vfs_cache_pressure
Не забудьте, что это очень сильно снизит производительность вашей системы, потому что вместо кэша данные будут читаться из диска.

Как очистить память подкачки

Пространство подкачки очистить очень просто. Для этого выполните:
# swapoff -a && swapon -a
Имейте в виду, что при очистке swap, все данные будут перенесены обратно в оперативную память.