удаление кэшированной памяти Linux

удаление кэшированной памяти Linux

У меня есть веб-сервер с 8 ГБ оперативной памяти, на котором запущен довольно интенсивный сайт PHP (1 сайт), который занимается обработкой файлов, графиками, электронной почтой, форумами и т. д. Окружение далеко не статично, что наводит меня на мысль, что кэширование чего-либо в оперативной памяти может дать очень мало, поскольку почти каждый запрос к серверу создает новые или обновленные страницы. И большая часть кэширования выполняется на стороне клиента, поэтому у нас есть тонна 304 запросов, когда дело касается изображений, javascript, css.

Кроме того, у меня есть языковые файлы, которые записаны в плоские файлы на сервере, где кэшированная оперативная память определенно лучше, чем чтение с диска. Но таких файлов всего несколько.

Примерно за две недели я перешел от 98% свободной оперативной памяти к 4% свободной оперативной памяти. Это произошло в то время, когда мы также выкладываем на сервер несколько крупных обновлений svn.

Мой вопрос заключается в том, будет ли мой сервер работать лучше, если я буду периодически очищать кэш (я знаю мнение Линуса Торвальдса по поводу кэша) с помощью следующей команды:

sync; echo 3 > /proc/sys/vm/drop_caches

Или мне лучше отредактировать следующий файл:

/proc/sys/vm/swappiness  

Если я заменю значение по умолчанию 60 на 30, то у меня будет гораздо меньше подкачек и гораздо больше повторного использования устаревшего кэша.

Конечно, приятно видеть, что весь этот кэш освобожден с помощью первой команды, но я бы солгал вам, если бы сказал, что это хорошо для среды рабочего стола. Но что насчет веб-сервера, который я описал выше? Мысли?

EDIT: Я знаю, что система будет получать память по мере необходимости из кэш-памяти, но спасибо, что указали на это для ясности. Мне мерещится, что Apache замедляется, когда большая часть памяти сервера хранится в кэше? Это совсем другая проблема?

решение1

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

Если данные в кэше сильно устарели (например, они были кэшированы во время необычной операции), они будут заменены «более новыми» данными по мере необходимости без их искусственной очистки.

Единственная причина для sync; echo 3 > /proc/sys/vm/drop_cachesобычного запуска — если вы собираетесь провести некоторые тесты производительности ввода-вывода и хотите начать с известного состояния (запуск сброса кэша между запусками для уменьшения различий в результатах из-за разной загрузки кэша при каждом запуске).

Ядро иногда будет подкачивать несколько страниц, даже если есть много оперативной памяти, которую оно может затребовать обратно из кэша/буферов, и настройка параметра подкачки может остановить это, если вы обнаружите, что это проблема для вашего сервера. Вы можете увидеть небольшое преимущество от этого, но, скорее всего, увидите временное снижение производительностиуронитьпутем искусственной очистки кэша+буфера.

Связанный контент