Как очистить кеши, используемые ядром Linux
Я хочу заставить ядро Linux выделять больше памяти для приложений после того, как кэш начинает занимать слишком много памяти (как видно из вывода "free" ).
Я запустил
sudo sync; sudo sysctl -w vm.drop_caches=3; free
(чтобы освободить кеш и диск ввода-вывода диска и кеш страниц), и я вижу, что только половина используемого кеша была освобождена - остальное остается. Как я могу рассказать, что занимает остальная часть кеша и заставить его освободиться?
Ответы
Ответ 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