Подтвердить что ты не робот

Как очистить кеши, используемые ядром Linux

Я хочу заставить ядро ​​Linux выделять больше памяти для приложений после того, как кэш начинает занимать слишком много памяти (как видно из вывода "free" ).

Я запустил

sudo sync; sudo sysctl -w vm.drop_caches=3; free

(чтобы освободить кеш и диск ввода-вывода диска и кеш страниц), и я вижу, что только половина используемого кеша была освобождена - остальное остается. Как я могу рассказать, что занимает остальная часть кеша и заставить его освободиться?

4b9b3361

Ответ 1

Вам нужно увеличить vfs_cache_pressure, а также установить swappiness на 0. Выполнение этого сделает кеширование кэша ядра более быстрым, при этом при равных или более благоприятных процессах при решении вопроса о том, что будет выгружено, вы получите преимущество. Вы только хотите сделать это, если процессы, о которых вы заботитесь, очень мало ввода-вывода диска. Если связанный с сетью процесс ввода/вывода должен быть заменен для обслуживания запросов, проблема и реальное решение заключается в том, чтобы поставить его на менее конкурентный сервер.

С настройкой по умолчанию swapiness ядро ​​почти всегда будет поддерживать хранение кеша FS в реальной памяти. Поэтому, если вы увеличиваете давление в кеше, не забудьте также настроить swappiness.

Ответ 2

Содержимое /proc/meminfo сообщает вам, для чего ядро ​​использует RAM для.

Вы можете использовать /proc/sys/vm/vfs_cache_pressure, чтобы заставить ядро ​​восстановить память, которая используется для кэшей, связанных с файловой системой, более лениво или с нетерпением.

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

Ответ 3

Вы можете найти John Nilsson ответ на мой вопрос, полезный для очистки кеша, чтобы проверить, связано ли это с вашей проблемой:

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

Хотя я предполагаю, что единственное реальное различие - 1 против 3