что такое pagecache, dentries, inodes?
только что узнал эти 3 новые методы от https://unix.stackexchange.com/questions/87908/how-do-you-empty-the-buffers-and-cache-on-a-linux-system:
чтобы освободить pagecache:
# echo 1 > /proc/sys/vm/drop_caches
чтобы освободить зубные протезы и inodes:
# echo 2 > /proc/sys/vm/drop_caches
чтобы освободить pagecache, зубные протезы и inodes:
# echo 3 > /proc/sys/vm/drop_caches
Я пытаюсь понять, что именно такое pagecache, dentries и inodes. Что это такое?
Do освободив их, также удалите полезные memcached и/или Рэдис кэш?
--
почему я задаю этот вопрос? Моя ОЗУ сервера Amazon EC2 заполнялась в течение нескольких дней - от 6% до 95% в течение 7 дней. Мне нужно запустить двухнедельный cronjob, чтобы удалить этот кэш. Затем использование памяти снова падает до 6%.
3 ответов
с некоторым упрощением, позвольте мне попытаться объяснить в контексте вашего вопроса, потому что существует несколько ответов.
похоже, вы работаете с кэшированием памяти структуры каталогов. Ан inode в вашем контексте-это структура данных, представляющая файл. А записи dentry - это структура данных, представляющая каталог. Эти структуры можно использовать для создания кэша памяти, который представляет структуру файлов на диске. Чтобы получить прямой список, ОС может перейти к dentries-если каталог есть-перечислите его содержимое (ряд индексов). Если нет, перейдите на диск и прочитайте его в память, чтобы его можно было использовать снова.
на кэш страницы может содержать любые сопоставления памяти с блоками на диске. Это может быть буферизованный ввод-вывод, сопоставленные файлы памяти, выгружаемые области исполняемых файлов-все, что может содержать ОС память из файла.
ваши команды очищают эти буферы.
Я пытаюсь понять, что именно такое pagecache, dentries и индексный дескриптор. Что это такое?
user3344003 уже дал точный ответ на этот конкретный вопрос, но по-прежнему важно отметить, что эти структуры памяти динамически распределены.
когда нет лучшего использования для "свободной памяти", память будет использоваться для этих кэшей, но автоматически очищается и освобождается, когда какое - то другое "более важное" приложение хочет выделить память.
нет, эти кэши не влияют на кэши, поддерживаемые любыми приложениями (включая redis и memcached).
моя ОЗУ сервера Amazon EC2 заполнялась в течение нескольких дней-от 6% до 95% в течение 7 дней. Сейчас два раза в неделю cronjob, чтобы удалить этот кэш. Затем использование памяти снова падает до 6%.
Вероятно, вы неправильно интерпретируете ситуацию: ваша система может просто эффективно использовать ее ресурсы.
чтобы немного упростить ситуацию: "свободная "память также может рассматриваться как" неиспользуемая " или даже более драматичная - пустая трата ресурсов: вы заплатили за нее, но не используете ее. Это очень неэкономичная ситуация, и ядро linux пытается сделать некоторое "более полезное" использование вашей "свободной" памяти.
часть его стратегии включает в себя использование его для сохранения различных типов дискового ввода-вывода с помощью различных кэшей памяти динамического размера. Быстрый доступ к кэш-памяти сохраняет "медленно" доступ к дискам, так что это часто полезная идея.
Как только" более важный " процесс хочет выделить память, ядро Linux добровольно освобождает эти кэши и делает память доступной для запрашивающего процесса. Поэтому обычно нет необходимости "вручную освобождать" эти кэши.
ядро Linux может даже решить поменять память процесса простоя на диск (пространство подкачки), освободив ОЗУ для использования в "более важных" задачах, возможно, также включая использование как какой-то кэш.
до тех пор, пока ваша система не активно обменивается входами/выходами, нет причин вручную очищать кэши.
общий случай "вручную смыть" эти кэши исключительно для сравнения тестов: ваш первый тестовый запуск может работать с" пустыми "кэшами и поэтому давать плохие результаты, в то время как второй запуск покажет гораздо" лучшие " результаты (из-за предварительно нагретых кэшей). Смывая кэши перед любым тестовым запуском, вы удаляете "теплые" кэши, и поэтому ваш тестовые прогоны более "справедливы" по сравнению друг с другом.
распространенное заблуждение заключается в том, что "свободная память" - это важно. Память предназначена для использования.
Итак, давайте проясним это :
- там используется память, где хранятся важные данные, и если это достигает 100%, вы мертвы
- тогда есть кэш / буфер, который используется до тех пор, пока есть место для этого. Это вспомогательная память для быстрого доступа к дисковым файлам. Если у вас закончилась свободная память, это просто освободит себя и позволит вам получить доступ к диску непосредственно.
очистка кэшированной памяти, как вы предполагаете, в большинстве случаев бесполезна и означает, что вы деактивируете оптимизацию, поэтому вы получите замедление.
Если у вас действительно закончилась память, то есть если ваша "используемая память" высока, и вы начинаете видеть использование swap, то вы должны что-то сделать.
: на экземплярах AWS работает известная ошибка, при этом кэш dentry поедает память без видимых причин. Это ясно описано и решено в этот блог.
мой собственный опыт работы с этой ошибкой заключается в том, что кэш" dentry "потребляет как" используемую", так и" кэшированную " память и, похоже, не освобождает ее вовремя, в конечном итоге вызывая своп. Сама ошибка может потреблять ресурсы в любом случае, поэтому вам нужно изучить ее.