Вот вывод free -m
:
total used free shared buffers cached
Mem: 7188 6894 294 0 249 5945
-/+ buffers/cache: 698 6489
Swap: 0 0 0
Я вижу, что почти 6GB
(5945 МБ) памяти 7GB
используется для кэширования файлов. Я знаю, как очистить тайники. Мой вопрос: возможно ли увидеть, какие файлы (или inode) кэшируются?
linux
memory-usage
ssapkota
источник
источник
buffers
иcached
:sysctl -w vm.drop_caches=3
. Возможно, вы захотите прочитать больше об этом, прежде чем использовать. Иногда это просто необходимо. Его доступно - это должно быть еще одна причина :)Ответы:
Ну, это простой способ взглянуть на страницы кэша ядра , если вам посчастливилось иметь ftools - «fincore» дает некоторую краткую информацию о том, какие страницы файлов которых являются содержание кэша.
Вам нужно будет предоставить список имен файлов, чтобы проверить их наличие в кэше страниц. Это связано с тем, что информация, хранящаяся только в таблицах кэша страниц ядра, будет содержать ссылки на блоки данных, а не имена файлов.
fincore
будет разрешать блоки данных данного файла через данные inode и искать соответствующие записи в таблицах кэша страниц.Не существует эффективного механизма поиска для обратного - получение имени файла, принадлежащего блоку данных, потребует чтения всех inode и косвенных блоков в файловой системе. Если вам нужно знать о блоках каждого отдельного файла, хранящихся в кэше страниц, вам нужно будет предоставить список всех файлов в вашей файловой системе
fincore
. Но это, опять же, может испортить измерение, поскольку большое количество данных будет считываться через каталоги и получать все иноды и косвенные блоки - помещать их в кеш страниц и извлекать те самые данные кеша страниц, которые вы пытались исследовать.источник
fincore
будет разрешать блоки данных данного файла через данные inode и искать соответствующие записи в таблицах кэша страниц. Не существует эффективного механизма поиска, который бы делал обратное - получение имени файла, принадлежащего блоку данных, потребовало бы чтения всех inode и косвенных блоков в файловой системе. Таким образом, алгоритмически вам будет лучше предоставить список всех файлов в вашей файловой системе,fincore
если вам действительно нужен этот уровень информации.Вы можете использовать утилиту vmtouch, чтобы увидеть, находится ли именованный файл или каталог в кеше. Вы также можете использовать инструмент для принудительного помещения элементов в кэш или блокировки их в кеше.
Теперь я могу «прикоснуться» к нему в кеш.
Теперь, чтобы увидеть, сколько кэшируется ...
источник
Я пишу очень простой сценарий оболочки, чтобы показать кэшированные файлы с помощью linux-fincore. Поскольку кэш-память является одной из частей памяти, мой код состоит в том, чтобы найти 10 самых популярных процессов, используемых RSZ, и использовать lsof для определения файлов, которые открыли процесс, и, наконец, использовать linux-fincore, чтобы определить, кэшированы ли эти файлы или нет.
Пожалуйста, поправьте меня, если я ошибаюсь.
источник
lsof
также сообщает о файлах, сопоставленных с адресным пространством процесса (и не обязательно кэшированных). Также вероятно, что большая доля файлов будет только частично / редко кэшироваться ...Вы также можете использовать pcstat (Page Cache Stat) https://github.com/tobert/pcstat
Надеюсь, это кому-нибудь поможет.
источник
Я написал следующий скрипт, который печатает все файлы и их состояние кеша с помощью команды pcstat. Это автономный скрипт для систем x86_64 linux. Он загружает pcstat, если это необходимо.
Первый аргумент - это местоположение файловой системы для анализа, а второй аргумент - это номер результата (Top N по количеству страниц в кеше).
источник