Утилита 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
);
shared
– Shared 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