Удаление кэша оперативной памяти Linux
У меня есть веб-сервер, который имеет 8 ГБ оперативной памяти и работает на довольно интенсивном php-сайте (1 сайт), который занимается манипулированием файлами, графикой, электронной почтой, форумами, как вы это называете. Окружающая среда далека от статичности, что наводит меня на мысль, что от кэширования чего-либо в оперативной памяти мало что можно получить, поскольку почти каждый запрос к серверу создает новые или обновленные страницы. И большая часть кэширования выполняется на стороне клиента, поэтому у нас есть тонна 304 запросов, когда дело доходит до изображений, javascript, css.
Кроме того, у меня есть языковые файлы, которые записываются в плоские файлы на сервере, где кэшированный оперативный памяти определенно лучше, чем чтение с диска. Но есть только несколько таких файлов.
Примерно через две недели я перешел от 98% свободного барана к 4% свободного барана. Это произошло в то время, когда мы также помещали несколько больших обновлений svn на сервер.
Мой вопрос заключается в том, будет ли мой сервер лучше настроен, если я буду периодически очищать свой кеш (мне известно о чувствах Линуса Торвальдса к кешу) с помощью следующей команды:
sync; echo 3 > /proc/sys/vm/drop_caches
Или мне лучше отредактировать следующий файл:
/proc/sys/vm/swappiness
Если я заменим значение по умолчанию 60 на 30, у меня будет гораздо меньше операций подкачки и намного больше повторного использования устаревшего кэша.
Конечно, приятно видеть, что весь этот кеш освобождается с помощью первой команды, но я бы соврал вам, если бы сказал, что это хорошо для среды рабочего стола. Но как насчет веб-сервера, как я описал выше? Мысли?
РЕДАКТИРОВАТЬ: Я знаю, что система будет получать память, как ей нужно из кеш-памяти, но спасибо за указание, что наша для ясности. Я воображаю вещи, когда Apache замедляется, когда большая часть памяти сервера хранится в кеше? Это совсем другая проблема?
1 ответ
Очистка кешей снизит производительность, а не поможет. Если бы ОЗУ была нужна для чего-то другого, она использовалась бы чем-то другим, поэтому все, что вы делаете, это некоторое время снижаете соотношение попаданий и промахов в кеш после того, как вы выполняете очистку.
Если данные в кеше сильно устарели (т.е. они кешируются во время необычной операции), они будут заменены на "более новые" данные по мере необходимости без искусственной очистки.
Единственная причина для бега sync; echo 3 > /proc/sys/vm/drop_caches
Обычно это происходит, если вы попытаетесь выполнить некоторые тесты производительности ввода-вывода и хотите, чтобы началось известное состояние (запуск сброса кэша между запусками, чтобы уменьшить разницу в результатах из-за того, что кэш заполняется по-разному при каждом запуске).
Ядро иногда меняет местами несколько страниц, даже если имеется достаточно оперативной памяти, которую оно может вернуть из кеша / буферов, и настройка параметра подкачки может остановить это, если вы обнаружите, что это проблема для вашего сервера. Вы можете получить небольшую выгоду от этого, но, скорее всего, увидите временное снижение производительности, искусственно очистив кэш + буфер.