Как очистить кеши, используемые ядром Linux - PullRequest
28 голосов
/ 01 марта 2009

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

Я бегу

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

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

Ответы [ 3 ]

17 голосов
/ 28 марта 2009

Вы можете увеличить vfs_cache_pressure, а также установить swappiness на 0.

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

Вы можете только хотеть сделать это, если процессы, которые вас интересуют, выполняют очень мало дискового ввода-вывода.

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

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

Таким образом, если вы увеличите нагрузку на кеш, обязательно настройте swappiness.

16 голосов
/ 01 марта 2009

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

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

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

15 голосов
/ 25 марта 2009

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

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

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

...