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

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

Я бегал

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

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


person Guss    schedule 01.03.2009    source источник
comment
Остающийся chache - это просто кеш, который сразу же удаляется, когда требуется новая память. Принудительное удаление этих областей кэша нецелесообразно. Приложения всегда будут первыми за память, и им не придется бороться за нее с кешем.   -  person ypnos    schedule 02.03.2009
comment
У меня проблема с моим сервером, и я считаю, что что-то злоупотребляет кешем до такой степени, что приложения переводятся на выгруженные страницы и перестают работать из-за нехватки памяти. Возможно, это проблема ядра, а может и не быть. Очистка кеша может быть хорошим способом проверки.   -  person Guss    schedule 02.03.2009


Ответы (3)


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

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

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

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

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

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

person Tim Post♦    schedule 28.03.2009
comment
Спасибо за ответ. Хотя это не то, на что я надеялся, я приму его, поскольку он включает информацию, которую я не знал, и дает некоторые рекомендации по достижению цели. Я все еще хотел бы лучше знать, как выяснить, для чего используется кеш, особенно когда он не очищается drop_caches. - person Guss; 31.03.2009

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

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

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

person hillu    schedule 01.03.2009
comment
Мое приложение выполняет очень мало операций ввода-вывода - большинство данных поступает из удаленной БД. Я немного не уверен в / proc / meminfo: я вижу, что кэшировано: 1,9 ГБ, SwapCached: 8 МБ. IIRC, это означает, что кэширование состоит из кэширования подкачки 8 МБ и прочего 1,892 ГБ (дисковый кеш и что еще?). Где подсчитываются файлы с отображением памяти? - person Guss; 01.03.2009
comment
Файлы с отображением памяти (если приложение вообще работает) должны иметь свои собственные рекомендации и давление, предпочтительно со стороны приложения, вызывающего posix_madvise (). Вы также можете прочитать о своей настройке «swappiness». - person Tim Post♦; 01.03.2009
comment
Действительно хороший ответ, но не ответ на мой вопрос :-). Правильно ли я понимаю, что файлы с отображением памяти учитываются по объему памяти RES их приложения? - person Guss; 01.03.2009
comment
Против их приложений VIRT, который может быть или не быть резидентным, в зависимости от того, все ли страницы доступны и загружены. - person stsquad; 18.04.2009

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

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

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

person Stephen Denne    schedule 25.03.2009
comment
1 только очищает кеш диска - это было актуально для вашего вопроса. Я также хочу очистить кеш страницы, так как думаю, что в одном из моих приложений происходит утечка памяти и плохая загрузка. - person Guss; 25.03.2009
comment
1 очищает кеш страницы, 2 очищает дентри и иноды, 3 очищает кеш страниц, дентри и иноды - person Schildmeijer; 18.04.2013