Мне интересно, могу ли я увидеть, какое приложение использует мой буфер оперативной памяти и кеш. Также в ядре указано время, когда данные удаляются из кеша. Мой Ram заполнен буфером и кешем, и он тоже начинает есть своп.
Вывод free -m:
$ free -m
total used free shared buffers cached
Mem: 14034 13878 156 0 10 11362
-/+ buffers/cache: 2505 11528
Swap: 8187 478 7709
Нет, своп не ест. Он служит только как блочный кеш. Это большая часть кеша, кеш не может перейти в своп, но для этого правила также существуют некоторые исключения. Например, кеширование медленного жесткого диска на быстром SSD может быть хорошим решением.
Но в вашем случае ситуация намного проще: Linux (и любая другая ОС) использует все (или почти все) свободной оперативной памяти на кэширующий жесткий диск. И нет, это не проблема, потому что, если нужна новая страница памяти, страницу кэша чтения всегда можно освободить. А использование как можно большего количества блочного кеша увеличивает среднюю скорость работы с файлами.
На самом деле, если вы хотите знать настоящий Чтобы освободить память вашей системы, вы должны рассчитывать «буферы» и «кеш», как если бы они были свободны.
То, что вы можете прочитать в заголовке «бесплатно», на самом деле (в основном очень минимальный) размер памяти, который не (не может быть) использован даже для кеширования. Это не проблема, и если ваша система работает медленно, это не из-за этого.
Причина использования свопа: какой-то блок памяти, который кажется ядром. очень неиспользованный, может быть полностью заменен. Это особенно области памяти различных демонов, которые остаются только в оперативной памяти и ничего не делают. Выгрузить их память не проблема, потому что они ни для чего не используются, но использование их теперь свободных RAM-страниц для кеширования может сделать вашу систему более быстрой.
Какой процесс использует кеш? На самом деле это сложно выяснить, практически невозможно. Блочный кеш заполняется не процессами, а операциями чтения с диска. Если дисковый блок в настоящее время находится в кеше (что означает, что повторное чтение этого блока не требует ожидания вашего жесткого диска), это означает кто-то прочитал этот блок, но не прописал, какой это был процесс. Если вы хотите знать эти данные, вам нужно наблюдать за использованием чтения с диска, пока это происходит!
Инструмент для этого есть, его название blkmon
. Он способен наблюдать за операциями чтения (и записи) блочного устройства, Google - ваш друг (или мы ждем вашего следующего вопроса, здесь или на unix SE тоже).