Назад | Перейти на главную страницу

Linux: какое приложение использует мой кэш оперативной памяти

Мне интересно, могу ли я увидеть, какое приложение использует мой буфер оперативной памяти и кеш. Также в ядре указано время, когда данные удаляются из кеша. Мой 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 тоже).