Linux: утилита free и очистка кеша памяти

Автор: | 02/11/2013
 

linux&bfreebsd_logoУтилита free – один из основных инструментов администратора, позволяющая отобразить статистику используемой и свободной памяти сервера.

Информацию free получает из файла /proc/meminfo – динамически изменяющего в процессе работы системы.

О разделе proc и файловой системе procfs более подробно можно почитать в статье Linux: описание и назначение файловой системы proc и каталога /proc.

Рассмотрим информацию, которую выводит free:

# free
total       used       free     shared    buffers     cached
Mem:       8061508    4632736    3428772          0      10268    3263140
-/+ buffers/cache:    1359328    6702180
Swap:      8388600     477768    7910832

Будучи запущенной без ключей – она отобразит статистику в килобайтах.

Для вывода информации в других единицах – используются ключи:

-b – в байтах;
-m – мегабайтах;
-g – гигабайтах.

Ключ -s позволяет запустить утилиту с заданным периодом обновления информации.

Например – обновлять каждые 5 секунд:

# free -m -s 5

Строки:

Mem – физическая память;
Swap – виртуальная память, или Paging.

Колонки:

total – общее количество памяти;
used – реально использующая в данный момент и зарезервированная системой память;
free – свободная память (total минус used);
sharedShared memory или Разделяемая память, можно посмотреть командой ipcs;
buffers – буферы в памяти – страницы памяти, зарезервированные системой для выделения их процессам, когда они затребуют этого, так же известна как heap-memory;
cached – файлы, которые недавно были использованы системой/процессами и хранящиеся в памяти на случай если вскоре они снова потребуются.

Теперь рассмотрим строку -/+ buffers/cache, в которой указываются более реальные данные об использовании памяти.

-/+ buffers/cache:    1441072    6620436

Вторая колонка в строке used равна used-(buffers+cached).

Посчитаем:

# free -m
total       used       free     shared    buffers     cached
Mem:          7872       4745       3127          0         13       3318
-/+ buffers/cache:       1413       6459
Swap:         8191        466       7725

Тут used = 4745 megabytes. Общее количество buffers и cached памяти – 3331 мегабайт. Итого, реально занятая процессами и системой память – лишь ~1413 (1 мегабайт “потерялся” из-за подсчёта в мегабайтах, а не байтах/килобайтах).

Аналогично подсчитывается и реально свободная память, только buffers и cached добавляются  к ней (так как на самом деле – это не занятые страницы):

>>> 3127+13+3318
6458

Что бы отобразить реально свободную память одной командой – можно воспользоваться такой командой:

# free -m | awk 'NR==3 {print $4 " MB"}'
6453 MB

Как очистить кеш памяти в Linux?

Можно выполнить такую команду:

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

Увы, показать насколько реально можно освободить таким образом памяти не получится, т.к. машина совсем не нагружена. Тем не менее – разница видна:

# free -m
total       used       free     shared    buffers     cached
Mem:          7872       4562       3309          0          2       3137

Однако, смысл выполнять такую очистку есть лишь в случае реальных проблем с памятью.

Для FreeBSD есть аналогичная утилита freecolor:

# cd /usr/ports/sysutils/freecolor && make BATCH=yes install clean
# freecolor -t -m -o
total       used       free     shared    buffers     cached
Mem:          1007        419        588          0          0          4
Swap:         1024         72        951
Total:        2031 = (     491 (used) +     1544 (free))

UPD Нагуглил ссылку на этот пост, в треде>>> есть еще пример:

я здесь прочел – как очистить кеш
http://rtfm.co.ua/linux-utilita-free…kesha-pamyati/, но при попытке выполнить указанную команду
sync; echo 3 > /proc/sys/vm/drop_caches
система выдала – ошибка доступа.
=====
поэтому я сделал по другому
sudo apt-get clean
sudo apt-get autoclean
и
поменял значения в таких файлах,
/proc/sys/vm/swappiness выставил 60
/proc/sys/vm/vfs_cache_pressure = 100